斯坦福机器学习笔记-单变量线性回归
斯坦福机器学习笔记-单变量线性回归
本节通过房价预测问题来学习第一个学习算法线性回归算法
基本概念
监督式学习-回归
- 监督式学习:由于对于数据样本来说,都包含与之对应的正确答案,故为监督式学习
- 回归:预测值为连续值,故为回归问题
训练集
首先明确几个数学符号, 如下图所示
- m:表示训练集样本数目
- 表示输入向量,也叫输入特征, 比如本例房价预测问题中的面积,居住区域等
- 表示输出变量,也叫目标变量
- (, )表示训练集中第
i
个训练样本
假设函数(Hypothesis Function)
通过给定的训练集学习到的函数h : X -> Y
叫做假设函数(Hypothesis Function),如图所示,本例房价预测问题中的假设函数就是一个房价(Y)关于面积(X)的函数。一个好的假设函数可以预测出对应X的Y值。
我们通过如下形式表示假设函数,为了方便,也叫作, 当然会有更复杂的函数,也许是非线性函数,但是由于线性函数是简单的形式,所以我们先从线性方程的例子开始学习,逐渐建立复杂的模型。
上图所示是单个变量的线性回归,这个变量就是x,根据x来预测房价的函数,这个模型也叫作Univariate linear regression。
代价函数(Cost Function)
引入代价函数的目的是为了更好的将我们的线性方程和数据相拟合。当我们设定了假设函数外,我们就可以进行预测。但是如何选择假设函数的参数和呢?选择不同的参数,时,就会有不同的假设函数。下图列举了三种不同, 情况下的假设函数
问题是如何选择参数呢?我们的想法是选择某个参数, ,使得对于训练集的训练样本(x, y), 尽可能的接近y
. 如果预测值和真实值越接近,表示假设函数越准确。这里我们使用均方误差来作为衡量标准,即我们的目标是最小化训练样本的预测值和真实值的平方的均值,公式如下
其中m为训练集中样本数目,上标i
表示某训练样本, 1/2是为了简化计算
现在我们定义一个代价函数
我们的目标就是关于, , 对代价函数, 求最小值, 即
代价函数也叫作平方误差代价函数, 也有其他代价函数,不过对于回归问题来说,平方误差代价函数是一个合理的选择。
代价函数直观理解
为了更好的理解代价函数,我们使用简化的假设函数,即令为0, 简化版的假设函数是经过原点的直线,如果所示
我们需要更好的理解两个函数,一个是代价函数,另一个是假设函数。需要注意的是,假设函数是关于x
的函数,对于本例就是关于房子面积x
的函数。与此不同的是代价函数是关于的函数, 而控制着假设函数的斜率。如图所示,令为1, 训练集包含三个样本
左边为假设函数,x
轴为房子面积,现在我们计算下当为1的情况下,代价函数的值为0
继续更改的值,计算对应的代价函数的值, 得到下图
对于不同的, 有着不同的假设函数和不同的, 我们学习算法的优化目标就是寻找某个使得代价函数值最小,从图中可以看出,当为1的时候,假设函数能够完美的拟合训练数据,代价函数取得最小值
代价函数直观理解II
上节中,我们令等于0, 故代价函数是关于的函数。但本节有两个参数, , 所以代价函数图像有些复杂。当只有一个参数的时候,代价函数图像是一个弓形函数,两个参数的代价函数在某种意义上也是一种弓形函数,是一个三维坐标的弓形曲面
其中,参数, 分别为底面坐标轴,某点高度表示值
后面为了简便,将会用轮廓图(contour plots),也叫等高线图来表示。如下图所示,最小值就是这一系列同心椭圆的中心点。举个例子,下图中右侧x点,等于800, 等于-0.15,左边就是该参数下的假设函数,可以看到,假设函数不能很好的拟合训练数据,并且x点距离中心点还很远,即此处代价值比较大
类似的,我们逐渐尝试不同的参数值,最后我们找到某个点,虽然不是最小值,但已经很接近最小值点了,如下图所示
当然,我们需要一种有效的算法,能够自动的找到使得代价函数J
取得最小值的参数。因为我们会遇到更复杂,更高纬度,更多参数的情况,那时无法将其可视化。这就引出我们下节要将的算法梯度下降算法。
由本两节可知,假设函数是我们拟合数据的函数,而代价函数是评价假设函数拟合数据的拟合程度。
梯度下降算法
梯度下降
梯度下降算法是一种很常用的优化算法,他不仅被用在线性回归中,也被用于机器学习领域中的众多领域。梯度下降算法寻找最有参数的思想是:首先随机初始化参数,比如, (例如, ), 不断地改变参数, , 减小, 直到找到最小值点。
下图片表明了梯度下降法的工作过程, 可以把梯度下降的过程想象成一个人下山,如果想要尽快的下山,则每次都应该向坡度最大的方向下山。
梯度下降算法会收到初始状态的影响,如果我们选择不同的初始点,可能会到达不同的局部最小值。比如下图
下面具体看一下梯度下降算法的定义,如图所示,
其中,:=
表示赋值,为学习速率,控制着下降的歩幅, 叫做梯度。算法的微妙之处在于要同时(simultaneously)更新和
梯度和学习速率
本节将深入介绍梯度和学习速率对于梯度下降算法的意义。为了简化问题,我们使得等于0. 假设我们选择的初始点在最小值的右侧,此时的斜率是正数。根据算法更新参数公式,减去学习速率 乘以 梯度, 相当于左移参数,逐渐靠近最低点。如果初始点选择在最低值的左边,则此时的斜率为负数,更新公式会增大,逐渐靠近最低点
如果初始点选取在最优处或者局部最低点,那么局部最优点的导数为0, 所以将不再改变
学习率会影响梯度下降的幅度。如果太小,则的更新速度会很小,那么梯度下降需要很久才能到达最低值。反之,如果太大,则的可能会直接越过最低值,甚至可能无法收敛,即无法达到最低值。
随着逐渐接近局部最优点,相应的导数也会变小,所以参数更新的幅度也会减小,并不需要额外减小的值来减小下降程度
应用
本节将结合梯度下降和代价函数,并将其应用到线性回归模型中。梯度下降重要的部分就是计算梯度,也就是偏导数项。
我们将假设函数带入到代价函数中,并且分别对、求偏导得
由此我们得到了完整的梯度下降算法
上节提到,梯度下降算法会受到初始点的影响,可能会收敛到局部最优点。但是用于线性回归问题的代价函数总是一个凸函数(Convex Function), 而凸函数没有局部最优解,只有一个全局最优解。故对于线性回归问题,使用梯度下降算法,总会得到一个全局最优解。
现在我们看一下梯度下降算法的运行过程,下图是关于假设函数和代价函数的图像
使用梯度下降逐渐更新参数, 的值,最后得到下图所示
最后我们得到最优解,用最优解下的假设函数对房价进行预测,比如一个1,250平方英尺的房子大概能卖到250k$,如下图所示