【cs229-Lecture2】Gradient Descent 最小二乘回归问题解析表达式推导过程及实现源码(无需迭代)
视频地址:http://v.163.com/movie/2008/1/B/O/M6SGF6VB4_M6SGHJ9BO.html
机器学习课程的所有讲义及课后作业:http://pan.baidu.com/s/1i3xcljJ
视频前半部分讲了梯度下降算法的迭代过程求的局部最小值,后半部分介绍了利用数学方法给出参数向量的解析表达式,从而求出参数的值,也就是一种无需迭代的方法。
由于PC上编辑不太方便,以下推导过程我会尽可能详细地呈现在草稿纸上,其实视频中AndrewNg已经讲解的很详细了,其实我也只是在看了推导过程之后,自己完全独立地推导了一遍,毕竟自己亲自有动笔了,印象自然深刻。如有不对之处,请指正。
我觉得,当我们表示出J(θ)的表达式后,就已经可以把问题转化为多元函数的极值问题了,因此,也就出现了下面中要求偏导数,以及要设偏导数为0的步骤。而这里之所以会涉及到线代的知识,是因为线代可以用来简化运算,矩阵的表示的优雅。
1、定义新符号;
2、给出5个定理;
3、把问题转化为数学计算;
说明:m代表数据量(即有多少行数据);n代表特征个数(从x0~xn,其中x0恒等于1)
1、定义新符号:
2、给出5个定理;

3、把问题转化为数学计算;


noIteration.java(导入jama包)
package noIteration; import java.io.IOException;
import java.util.List; import Jama.Matrix; public class noIteration{ public static List<Data> DS;
public static int m; public static double[][] initX(){
double[][] x =new double[m][2];
int m=DS.size();
for(int i=0;i<m;i++){
x[i][0]=DS.get(i).x[0];
x[i][1]=DS.get(i).x[1];
}
return x;
} public static double[][] initY(){
double[][] y = new double[m][1];
int m=DS.size();
for(int i=0;i<m;i++){
y[i][0]=DS.get(i).y;
}
return y;
} public static void main(String[] args) throws IOException{ DS=new DataSet().ds;
m=DS.size(); double[][] x=initX();
double[][] y=initY();
Matrix mtx=new Matrix(x);
Matrix mty=new Matrix(y);
Matrix mtxT=mtx.transpose();
Matrix ans=(mtxT.times(mtx)).inverse().times(mtxT).times(mty);
for(int i=0;i<2;i++){
System.out.print(" theta ["+i+"] : "+ans.get(i, 0));
}
}
}
总结:这个算式,简直美丽极了!
【cs229-Lecture2】Gradient Descent 最小二乘回归问题解析表达式推导过程及实现源码(无需迭代)的更多相关文章
- 李宏毅机器学习笔记2:Gradient Descent(附带详细的原理推导过程)
李宏毅老师的机器学习课程和吴恩达老师的机器学习课程都是都是ML和DL非常好的入门资料,在YouTube.网易云课堂.B站都能观看到相应的课程视频,接下来这一系列的博客我都将记录老师上课的笔记以及自己对 ...
- (3)梯度下降法Gradient Descent
梯度下降法 不是一个机器学习算法 是一种基于搜索的最优化方法 作用:最小化一个损失函数 梯度上升法:最大化一个效用函数 举个栗子 直线方程:导数代表斜率 曲线方程:导数代表切线斜率 导数可以代表方向, ...
- CS229 2.深入梯度下降(Gradient Descent)算法
1 问题的引出 对于上篇中讲到的线性回归,先化一个为一个特征θ1,θ0为偏置项,最后列出的误差函数如下图所示: 手动求解 目标是优化J(θ1),得到其最小化,下图中的×为y(i),下面给出TrainS ...
- 线性回归、梯度下降(Linear Regression、Gradient Descent)
转载请注明出自BYRans博客:http://www.cnblogs.com/BYRans/ 实例 首先举个例子,假设我们有一个二手房交易记录的数据集,已知房屋面积.卧室数量和房屋的交易价格,如下表: ...
- [Converge] Gradient Descent - Several solvers
solver : {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}, default: ‘liblinear’ Algorithm to use in the op ...
- 斯坦福机器学习视频笔记 Week1 Linear Regression and Gradient Descent
最近开始学习Coursera上的斯坦福机器学习视频,我是刚刚接触机器学习,对此比较感兴趣:准备将我的学习笔记写下来, 作为我每天学习的签到吧,也希望和各位朋友交流学习. 这一系列的博客,我会不定期的更 ...
- Gradient Descent 梯度下降法-R实现
梯度下降法: [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 作为一个初学者,水平有限,欢迎交流指正. 应用:求线性回归方程的系数 目标:最小化损失 ...
- 机器学习-随机梯度下降(Stochastic gradient descent)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)
引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自网上的免费课程和一些经典书籍,免费课 ...
随机推荐
- update-alternatives常用命令(转自http://blog.csdn.net/baggio1006/article/details/6338623)
Linux 发展到今天,可用的软件已经非常多了.这样自然会有一些软件的功能大致上相同.例如,同样是编辑器,就有 nvi.vim.emacs.nano,而且我说的这些还只是一部分.大多数情况下,这样的功 ...
- 微软office web apps 服务器搭建之在线文档预览
案例:http://owa.linbsoft.com/op/generate.aspx# 文档地址:http://demo.linbsoft.com/CourseFile/201407/2014070 ...
- C# 当前目录你了解多少
C#中获取程序运行的当前目录的方法有多种,本文为大家提供三种方式,并作简单分析,有需要的朋友,可以参考下. 在C#中,有很多方式可以获取程序运行的当前目录,常见的方式有: .string strPat ...
- 【转】Spring Boot干货系列:常用属性汇总
转自Spring Boot干货系列:常用属性汇总 附录A.常用应用程序属性 摘自:http://docs.spring.io/spring-boot/docs/current/reference/ht ...
- JAVA中的数字运算+号与字符串+号
(1)当“+”两边是非数值类型,“+”就被看作连接符. (2)当“+”两边都是数值类型,“+”就被看作算术运算中的加号. (3)当“+”一边是非数值,一边是数值类型,“+”就被看作连接符.
- 基于ThinkPHP的在线编辑器调用
开源的在线编辑器有很多,比如FCKEditor,UEditor,Kindeditor等,调用方式也都大同小异 下面列举UEditor在线编辑器插件在ThinkPHP里面的应用 1.Ueditor下载地 ...
- Spring Boot 处理 REST API 错误的正确姿势
摘要:如何正确的处理API的返回信息,让返回的错误信息提供更多的含义是一个非常值得做的功能.默认一般返回的都是难以理解的堆栈信息,然而这些信息也许对于API的客户端来说有可能并没有多大用途,并没有多大 ...
- 新浪股票接口AndroidSDK
昨天想到一个点子,需要访问股票行情.于是在网上搜了一下免费的股市行情的接口.发现新浪股票的数据接口比较稳定,于是就用它了. 网上对于新浪股票的数据接口介绍比较详细,并且实现也很简单,所以花了一下午就基 ...
- CorelDRAW中如何复制对象属性详解
复制对象属性是一种比较特殊.重要的复制方法,它可以方便而快捷地将指定对象中的轮廓笔.轮廓色.填充和文本属性通过复制的方法应用到所选对象中.本教程将详解CorelDRAW中如何复制对象属性. Corel ...
- 安装 运行yum报错:No module named yum
报错情况: There was a problem importing one of the Python modulesrequired to run yum. The error leading ...