机器学习(Andrew Ng)笔记(二):线性回归模型 & 梯度下降算法

线性回归模型

回忆一下第一节课提出的预测房屋每平方单位价格的例子。在这个例子中,我们可以画一条直线,尽量符合数据点的分布趋势。我们已经知道这是一个回归问题,即预测连续值的输出。实际上,这是一个典型的线性回归模型。之所以这样定义,大概是因为回归方程可以用一个线性函数来表示。

我们可以假设这个线性函数为:

这是一个关于x的一元一次方程。其中两个参数的值我们还不知道,要根据训练集中的数据求解出来。这里要定义几个概念,我们已经有的数据,即房屋面积与单价的对应数据对,被称作训练集。x作为房屋面积,称作输入;y作为房屋单价,成为输出。可以用(x,y)表示一个训练样本。训练样本的数量定义为m。像上面这种只有一个变量x的模型叫做单变量线性回归模型。

用机器学习方法解决这个问题的过程,实际上就是用训练算法对训练集中的数据进行处理,得到我们的回归方程h,然后有了新数据的时候,我们就可以在只知道输入x的情况下,用回归方程h计算出对应的输出y的值。在这里x就是房屋大小,y就是房屋每平方单位的单价。

那么如何求解刚才的那个方程h(x)呢?当然我们之前用肉眼去直觉判断,然后画一条线的方法是非常不准确的。求解h(x)的关键,其实在于求解两个未知参数的值。直觉上来看,我们的目的是,让求得的h函数,能够让训练集中x根据h函数对应的y,与真实的y值尽量接近,越接近越好。我们可以根据这个标准,来计算h函数的参数。

于是,我们引入了代价函数的概念。

上面这个公式中的代价函数J,就是刚才我们说的“目的”的数学表达。首先我们计算训练集中x根据h函数对应的y值,减去真实的y值的差。因为这个差可能为正也可能为负,而我们并不在意正负,只在意这个差值的大小,所以对其进行平方,这样就都为正了。然后我们把训练集中所有的数据都如此处理,把求得的平方和加起来,再除以2m。为什么不是除以训练集中数据个数m,而是除以其2倍呢?这其实是一个统计学上的考虑,可以减小误差。

函数J实际上是一个平方误差函数。作为代价函数,J当然也可以是其他的函数类型,但是对这个线性回归的问题来说,使用平方误差函数作为代价函数,是最为合理的。那么我们的目标也呼之欲出了,就是求代价函数J的最小值。

为了能够直观地理解这个问题,可以先简化问题,然后从图上看。如果我们将问题简化为第一个参数为0的情况,那么h函数就会变成一条经过原点的直线,而J函数也会只与一个变量有关,其函数图像是一个一元二次函数,我们只要定位到一元二次函数图像的最低点,就是我们要求的参数,能够让代价函数J取得最小值。

回到原问题,如果第一个参数不为0,那么此时函数J就有了两个参数,也就是说,变成了一个二元二次函数的问题,显然这时的函数图像就不能在二维平面上表示出来了。实际上这个函数的图像表示在三维图中是这样的。

直觉来看,其实也是有一个最低点的,不过这个最低点应该怎么求呢?

在这里引入了一个轮廓图(Contour plot),其实这个不是必须要知道的知识,但是了解一下有助于理解。上面的三维图其实可以以一种巧妙的方式用二维图来表示。下面的图中,右边的图就是一个典型的轮廓图,一条线表示了x和y取得的函数值相同的点,也就是说,在这条线上,虽然x和y的值不同,但是对应的函数值是相同的。红色小×表示的那个点代表的代价函数J,其原本的h函数就是左图所示的图像。那么右图中,最低点在哪里呢?回顾一下刚才的三维图,可以直觉认为,最低点就是蓝紫色圆圈最中心的那个点。

让我们回到问题,如何通过数学的方法,求出代价函数最低点的两个参数值呢?

梯度下降算法

是的,我们使用的算法那就是梯度下降算法(Gradient descnet)。这个算法的运行过程是这样的:

(1)猜想两个参数的值,也就是给定参数一个初值,比如说都初始化为0,我们的目标是从这个值渐渐逼近我们想要的值;

(2)不断修改两个参数,直到得到代价函数J的局部最小值。

我们尝试在三维图上直观地考虑这个问题。假设我们随便取了一个值,在某个位置,然后我们要修改两个参数,如何修改呢?肯定是让这两个参数在函数图像上的点更接近最低点。这就有点像爬山,只不过反过来,我们是在下山,要想下到最低点,那么就一步一步地走,每一步都在往下走,低一点再低一点,最后就到达最低点了。

这个算法的表达式是这样的。

注意递归下降算法的关键是,两个参数要同时更新。这个很好理解,因为J函数是与两个参数都有关的,如果不同时更新,那么一个更新的参数必然会影响到另一个参数的值。同时更新在代码中的实现可以见图的下半部分。

对于这个图中的计算公式,有两点非常非常值得注意。第一就是参数α,为什么要在代价函数J前面乘以这个参数呢?实际上α代表learning rate,可以这样理解,在函数图上“下山”的时候,我们是小碎步走,还是大踏步走?也就是说,α定义了我们每次修改两个参数值的大小间隔多少。在实际应用中,α是应该随着对目标的接近而不断减小的,但是α固定大小也可以保证收敛到最小值,因为随着接近局部最小值,函数的偏导数也会逐渐变小。

偏导数,就是第二个值得注意的地方,即

可能学过微积分的才知道这个具体代表什么,不过没学过也没关系,直观来看,这个分数所代表的,就是三维图上某一点的斜率,通俗点说,就是陡峭程度,以及陡峭的方向。在公式中,这个偏导数的存在确保了我们的算法会逐渐向最小值也就是斜坡下降的部位逼近。

梯度下降法其实也可以用于别的算法,而不单单是线性回归模型。下面我们就讨论用于线性回归的梯度下降算法。

用于线性回归的梯度下降

我们把代价函数J的公式代入梯度下降算法的公式,然后利用偏导数的概念对公式进行化简,最后可以得到这个公式。具体的推导需要一些微积分的知识。

我们其实可以直接拿来用了。也就是说,算法大概就是这样写的,我们利用这两个公式不断地修正两个参数的值,直到函数J到达了一个最小值。我们现在有了这个公式,就可以应用梯度下降算法了。

如果在这个过程中,每一步都用到了所有的训练集中数据,那么就叫做批量梯度下降(Batch gradient descent)。

时间: 2024-08-10 13:21:13

机器学习(Andrew Ng)笔记(二):线性回归模型 & 梯度下降算法的相关文章

线性回归与梯度下降算法

线性回归与梯度下降算法 作者:上品物语 知识点: 线性回归概念 梯度下降算法 l  批量梯度下降算法 l  随机梯度下降算法 l  算法收敛判断方法 1.1   线性回归 在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性组合. 回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析.如果回归分

斯坦福CS229机器学习课程笔记一:线性回归与梯度下降算法

应该是去年的这个时候,我开始接触机器学习的相关知识,当时的入门书籍是<数据挖掘导论>.囫囵吞枣般看完了各个知名的分类器:决策树.朴素贝叶斯.SVM.神经网络.随机森林等等:另外较为认真地复习了统计学,学习了线性回归,也得以通过orange.spss.R做一些分类预测工作.可是对外说自己是搞机器学习的还是不太自信,毕竟和科班出身的各位大牛相比自己对这些模型.算法的理解只能算是“知其然而不知其所以然”,用起来总感觉哪里不对劲. 因此,去年早早地就把网易公开课上Andrew大神的斯坦福CS229课程

机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

本文介绍了机器学习中基本的优化算法-梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有样本的特征向量组成的矩阵 x(i) 是第i个样本包含的所有特征组成的向量x(i)=(x(i)1,x(i)2...,x(i)n) y(i) 第i个样本的label,每个样本只有一个label,y(i)是标量(一个数值) hθ(x(i)) :拟合函数,机器学习中可以用多种类型的拟合函数 θ 是函数变量,

简单多元线性回归(梯度下降算法与矩阵法)

多元线性回归是最简单的机器学习模型,通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测. 对应的模型如下: n: 特征数量. 一般选取残差平方和最小化作为损失函数,对应为: M:训练样本数量. 通过最小化代价损失函数,来求得 值,一般优化的方法有两种,第一是梯度下降算法(Gradient Descent),第二种是矩阵法(The normal equations). 梯度下降算法

线性回归之梯度下降算法

线性回归之梯度下降法 1.梯度的概念 梯度是一个向量,对于一个多元函数\(f\)而言,\(f\)在点\(P(x,y)\)的梯度是\(f\)在点\(P\)处增大最快的方向,即以f在P上的偏导数为分量的向量.以二元函数\(f(x,y)\)为例,向量\(\{\frac{\partial f}{\partial x},\frac{\partial f}{\partial y}\}|_{(x_0,y_0)}=f_x(x_0,y_0)\overrightarrow i+f_y(x_0,y_0)\overri

Hadoop 学习笔记二 --- 计算模型MapReduce

       MapReduce 是一个计算模型,也是一个处理和生成超大数据集的算法模型的相关实现.用户首先创建一个Map函数处理一个基于Key/Value pair 的数据集合,输出中间的基于Key/Value pair的数据集合,然后再创建一个Reduce 函数用来合并所有的具有相同中间Key值的中间Value值.其最主要的两个部分就是Map过程和Reduce过程. 一. Map 处理过程 1. Mapper 类的处理原理        Mapper 类的最主要的功能就是将输入的Key/Va

机器学习实战读书笔记(二)k-近邻算法

knn算法: 1.优点:精度高.对异常值不敏感.无数据输入假定 2.缺点:计算复杂度高.空间复杂度高. 3.适用数据范围:数值型和标称型. 一般流程: 1.收集数据 2.准备数据 3.分析数据 4.训练算法:不适用 5.测试算法:计算正确率 6.使用算法:需要输入样本和结构化的输出结果,然后运行k-近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理. 2.1.1 导入数据 operator是排序时要用的 from numpy import * import operato

[Exercise]线性回归、梯度下降算法

1.梯度下降 1.1批梯度下降 eg1:用梯度下降法确定h(x)=x^2-t*x-t中参数t的值 注意迭代因子的选择很重要QAQ,如果程序结果成了发散的就要看看是不是迭代因子选的不好.[最后那个-0.01是无意中试出来的QwQ 1 def hypo(t,x): #precise answer : t=2 2 return (x*x-t*x-t) 3 4 def cost(t): 5 tmp=0 6 for i in range(0,num): 7 tmp+=(yy[i]-hypo(t,xx[i]

Andrew Ng机器学习课程笔记(二)之逻辑回归

Andrew Ng机器学习课程笔记(二)之逻辑回归 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7364598.html 前言 学习了Andrew Ng课程,开始写了一些笔记,现在写完第5章了,先把这5章的内容放在博客中,后面的内容会陆续更新! 这篇博客主要记录了Andrew Ng课程第二章逻辑回归的笔记,主要介绍了梯度下降法,逻辑回归的损失函数,多类别分类等等 简要介绍:逻辑回归算法是分类算法,我们将它作为分类算法使用.