吴恩达机器学习笔记(2)—单变量线性回归
目录
一、模型表示
二、代价函数
三、代价函数的直观理解(1)
四、代价函数的直观理解(2)
五、梯度下降
六、梯度下降的直观理解
七、线性回归的梯度下降
在本篇内容中,我们将介绍第一个机器学习算法——线性回归算法。更重要的是,我们将借助这个算法,带你了解一个完整的监督学习流程。
一、模型表示
我们通过一个例子来开始:预测房价。我们拥有一个数据集,记录了美国俄勒冈州波特兰市的若干房子面积及其对应的成交价格。横轴表示房子的面积(平方英尺),纵轴表示房价(千美元)。如果有一套房子面积是 1250 平方英尺,想知道大概能卖多少钱。你可以通过构建一个预测模型来实现,比如你可以用一条直线来拟合数据,从而推断出:这套房子可能值大约 22 万美元左右。
这是监督学习算法的一个例子。 因为在训练过程中,每个数据样本都包含一个“正确答案”,也就是我们已经知道的真实输出(每个房子的实际售价)。而且这还是一个回归问题的例子,因为预测一个具体的数值输出(房子的价格)。
在监督学习中我们有一个数据集,这个数据集被称训练集,如下图。
在课程中,使用以下符号来描述训练集和模型结构:
m:训练样本数量
x:特征/输入变量(例如房子面积)
y:目标变量/输出变量(例如房子价格)
:第 i 个训练样本
h:学习算法输出的假设函数(hypothesis)
一个典型的监督学习过程如下:
收集训练数据,比如不同面积的房子及其对应价格。
将这些数据输入给学习算法。
算法“学习”出一个函数 h,也就是我们的预测模型。
当想预测一套房子的售价时,只需将其面积作为输入,使用这个函数 h 得到预测价格。
换句话说,我们希望找到一个函数 h,使得它能近似地预测出输入 x(房屋面积)对应的输出 y(价格)。这可以用线性函数表示为:
因为这里只有一个特征(房子面积),所以我们称这种情况为单变量线性回归。
二、代价函数
在这一节中我们将定义代价函数的概念,这有助于我们弄清楚如何把最有可能的直线与我们的数据相拟合。在上一节中,我们得到的假设函数为一个线性函数形式:
选择不同的参数 和
会得到不同的假设函数
,如下图。
称为模型参数,我们要做的是选择出一组合适的参数
和
,使得模型预测值
与实际值 y 的差距最小。这里给出标准定义,在线性回归中要解决的是最小化问题。
最小化公式,加平方是为了使差距极其小
对所有训练样本的差距进行求和,
是为了尽量减少平均误差
由于假设函数表示为
因此问题变成找到
和
的值,使以下公式最小
就是代价函数,这个函数也叫作 平方误差代价函数,它是回归问题中最常见也是最合理的选择之一。
三、代价函数的直观理解(1)
在这一节中,为了更好地使代价函数J可视化,我们使用一个简化的代价函数,可以让我们更好的理解代价函数的概念。
将假设函数的参数
视为0
那么代价函数就变为
优化目标就是尽量减少
的值
实际上,有两个关键函数是我们需要去了解的。一个是假设函数 ,第二个是代价函数
。假设函数h是对于给定的
的值,是一个关于 x 的函数。代价函数J是关于参数
的函数。假设有三个点的训练集(1,1) (2,2) (3,3) ,当
时,代价函数J的值计算如下。
得出当
时,
,因此
绘制的两个函数的图形如下。
当 时,代价函数J的值计算如下。
得出当
时,
绘制的两个函数的图形如下。
同理,计算出其它代价函数J的值,比如:
当
时,
当
时,
最终,得到的代价函数J的图形如下。
学习算法的优化目标,是通过选择 的值,获得最小的
。在这条曲线中,当
时,
最小。通过观察也可以得出,这是条完美拟合训练集数据的直线。
四、代价函数的直观理解(2)
在本节课程中,我们将更深入地学习代价函数的作用,并借助图形化方式(等高线图)来帮助我们直观地理解其行为与最小值位置。下面是本节用到的公式,与上节不一样的是保留参数 和
。
假设函数:
模型参数:
![]()
代价函数:
优化目标:
采用关于住房价格的训练集,假设,绘制假设函数h和代价函数J的图形。其中,代价函数J是关于
和
的函数,是一个3D曲面图,横轴为
和
,竖轴为代价函数J。
为了更好地展现图形, 我们使用等高线图来展示代价函数,轴为 和
,每个椭圆形显示一系列
值相等的点,这些同心椭圆的中心点是代价函数的最小值。右下图是代价函数的等高线图,左下图是代价函数的最小值(椭圆的中心点)对应的假设函数的图形。
五、梯度下降
在本节课程中,我们将使用梯度下降法替代在上节中的人工方法,来自动寻找代价函数J最小值对应的参数 和
,也更适合处理在遇到更复杂、更高维度、更多参数的难以可视化的情况。
问题概述:假设有个代价函数
,我们需要用一个算法来最小化这个代价函数。
梯度下降法的思路:首先给定
和
的初始值,通常为
,然后不停地一点点地改变
和
的值来使J变小,直到找到J的最小值或局部最小值。
通过图像可以更直观地理解梯度下降法是如何最小化代价函数J的。下图是横轴为 和
,竖轴为代价函数J ,并对
和
赋以不同的初始值。
把这个图像想象为公园中的两座山,然后你正站在山上的一个点上,在梯度下降算法中,我们要做的就是旋转360度,看看周围,并问自己要尽快下山的话,我应该朝什么方向迈步?然后你按照自己的判断迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。对
和
赋以不同的初始值,会得到如图中两个不同的局部最低点,这是梯度下降法的一个特点。
如下图是梯度下降法的数学定义,将会重复更新 的步骤,直到收敛。
其中是 α 学习率,用来控制梯度下降时迈出的步子有多大。如果 α 值很大,会用大步子下山,梯度下降就很迅速;如果 α 值很小,会迈着小碎步下山,梯度下降就很慢。 是代价函数J的导数,这跟微积分有关系。
要正确实现梯度下降法,还需要同时更新 和
,左下图的同时更新是正确的,右下图没有同时更新是错误的。
六、梯度下降的直观理解
梯度下降算法的数学定义如下,其中,α 是学习率, 是导数项。本节课程将直观认识这两部分的作用,以及更新过程有什么意义。
下面将直观解释导数项的意义,如下图像,是一个只有参数 的简化的代价函数
的图像,梯度下降算法的更新规则:
导数项 可以说是
点关于代价函数
的切线的斜率,斜率可以表示
其中,β 是直线与 x 轴正方向的夹角。因此,图中是个正斜率,也就是正导数,同时学习率 α 永远是个正数,所以
更新后变小了,要往左移,更接近最低点。
取另一个点 ,如上图,计算得出是负斜率,也就是负导数,所以
更新后变大了,要往右移,更接近最低点。
接下来介绍学习率 α 的作用,如果 α 太小,如下图,结果就是会一点点地挪动,需要很多步才能到达全局最低点。
如果 α 太大,如下图,那么梯度下降法可能会越过最低点,甚至可能无法收敛或者发散。
如果 已经处在一个局部的最低点,如下图,由于最低点的斜率为0,也就是导数等于0,所以
将保持不变,那么梯度下降法更新其实什么都没做,它不会改变参数的值。
接下来解释即使学习速率 α 保持不变时,梯度下降也可以收敛到局部最低点。如下图,在梯度下降法的更新过程中,随着越接近最低点,导数(斜率)越来越小,梯度下降将自动采取较小的幅度, 更新的幅度就会越小,直到收敛到局部极小值,这就是梯度下降的做法。所以实际上没有必要再另外减小 α 。
七、线性回归的梯度下降
在本节课程,我们要将梯度下降法和代价函数结合,得到线性回归的算法,它可以用直线模型来拟合数据。如下图,是梯度下降算法和线性回归模型,线性回归模型包含了假设函数和平方差代价函数。
将梯度下降法和代价函数结合,即最小化平方差代价函数,关键在于求出代价函数的导数
根据微积分公式,在 j 等于0和1时,推导出的偏导数公式如下
根据公式计算出偏导数项的值,就可以代入到梯度下降法中,不断地对参数进行同步更新,直到收敛,得到线性回归的全局最优解。
在上面的算法中,有时也称为”批量梯度下降”,指的是在梯度下降的每一步中,我们都用到了所有的训练样本。在梯度下降中,在计算微分求导项时,我们需要进行求和运算,需要对所有 m 个训练样本求和。而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。
如果之前有学过高等线性代数,应该知道有一种计算代价函数 J 最小值的解法,而不需要使用梯度下降这种迭代算法。这是另一种称为正规方程(normal equations)的方法。实际上在数据量较大的情况下,梯度下降法比正规方程要更适用一些。