上一篇:机器学习笔记(3)——梯度下降算法
一、多变量线性回归及其预测函数和代价函数的定义
目前为止,我们探讨了单变量的回归模型,现在我们对房价模型增加更多的特征,例如房间数、楼层等,构成一个含有多个变量的模型,探讨多变量线性回归问题。
如下表所示,其中
x(i):表示第i个样本的各个特征的值组成的向量。
x(i)j:表示第i个样本中第j个特征的值
预测函数:那么这样多变量的模型的预测函数就和之前单变量的不一样了,预测函数如下包含多个变量,假设一个恒等于1的特征x0,那么预测函数就等于参数向量θ的转置与特征向量x的乘积。
代价函数:代价函数同样是求所有样本的预测值与真实值的平方差的总和的最小值,只不过这里的预测函数有n+1个变量和n+1个参数,这里用θ表示n+1维的参数向量,故多变量线性回归的代价函数J(θ)如下
二、多元梯度下降求多变量线性回归的代价函数最小点
同样的我们也可以使用梯度下降算法来求解上述代价函数最小点,这种求解有多个特征的代价函数的最小点的梯度下降算法称为多元梯度下降。
但与单变量的线性回归的梯度下降相比并没有太大区别,同样是选取一个起始θ,然后在循环体中每个参数变量θj都减去当前位置针对自身的偏导数,这样不断循环迭代直到逼近代价函数的一个最低点。可以看出参数变量θj其实是一样的
1. 多元梯度下降实用技巧——特征缩放(Feature Scaling)
假设房价模型的特征有如下x1、x2两个,这两个特征的取值范围相差非常大,那么它的代价函数J(θ)的等值线图(假设只有两个参数θ1和θ2,θ0忽略)中的等值线就会呈现一个类似很扁平的椭圆的情况(如下图左边所示),在这样的代价函数上运行梯度下降要迭代更多次,将会花费很多时间
如果能使特征的取值范围都比较相似,就可以提升梯度下降的速率。于是我们可以考虑将样本特征的值除以其范围的最大值,使得所有特征的取值范围都接近[0, 1],那么代价函数的等值线就会更加接近圆形(如上图右边所示),使得梯度下降过程的”路径"更短,从而能够用更少的迭代次数收敛到最低点。这样统一特征的取值范围以提升梯度下降的速率的过程就叫特征缩放。一般都是缩放到[-1, 1]左右的范围,太大或者太小效果都不太好。上图案例中特征值都是正数,特征缩放后[-1, 0)范围内也没有值,这时候我们可以用均值归一化的方式进行处理。
均值归一化(mean normalization):在特征缩放中用xi - ui替代xi,使得特征值具有为0的平均值。
如下图所示,让xi减去最大值的一半再除以最大值,就可以使特征值大致分布在[-0.5, +0.5]了。
2. 多元梯度下降实用技巧——控制学习率(Learning rate)
在迭代过程中的得到的代价函数J(θ)的最小点会不断下降,但我们如何知道什么时候趋近收敛了呢,也就是说什么时候可以停止迭代了呢?第一种方法是通过设置一个阈值如10^-3,当某次迭代J(θ)降低的数值小于这个阈值时就停止迭代。当然更好的方法是画出获取的J(θ)最小点迭代的曲线图,如下图左边(横轴是迭代次数n,纵轴是第n次迭代得到的代价函数最小值min J(θ)),
这样也可以方便观察出算法有没有正常工作,如果min J(θ)出现上升的情况,则说明学习速率过大导致越过了最低点然后来回震荡上升,需要降低学习率α,如果min J(θ)下降得过于缓慢,则可以考虑增大学习率α。
三、特征与多项式回归(Polynomial regression)
在设计预测函数时我们可能会认为其不一定是线性函数,比如房价不一定随房子大小线性增加,而可能是一个二次函数或者三次函数,因此我们可以像如下用特征的多项式来拟合预测函数,用房子大小、大小的平方和大小的立方分别表示三个特征(这样又变回线性回归的问题了)
如果这样设计特征然后用梯度下降计算的话,特征缩放将更为重要,因为各个特征的取值范围相差更大了。
如果特征很多的话似乎变得难以选择难以设计,后面会介绍一些算法能够自动选择合适的特征。
四、正规方程(Normal equation)
到目前为止,我们都在使用梯度下降算法通过不断迭代收敛到局部最小值,但是对于某些线性回归问题,正规方程方法是更好的解决方案。正规方程提供了一种求解θ的解析解法,不需要运行迭代算法而是直接一次性求解θ的最优值。
首先我们来看对于一个简单的二次J(θ)方程我们是如何求其最低点的。如下,我们只需要对θ求导,求解导数为0的点,就可以找到其最低点了(假设J(θ)是一个如图右的函数)。
那么对于包含多个参数变量的J(θ),我们同样可以对每个θj求偏导,求解使其偏导数为0的θj,这样求解出一组参数θ就是J(θ)的一个局部最低点(也可以这样反过来理解:J(θ)的一个局部最低点也是各个方向的导数都为0的点)
但是实际这样通过求偏微分来求解的过程是很复杂的,可以通过以下方式获取偏导数为0时θ的值:假设我们有如下4个样本,每个样本有4个特征,补上一个常数特征x0共5个特征,于是所有的特征值可组成一个如下4 x 5的特征值矩阵X,样本的价格可组成一个4维向量y
那么最终可解出代价函数最小点θ为(现在只需要记住这个公式,推导之后会讲):
注:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),可尝试通过删除多余的特征(线性相关的特征)或者过多的特征解决不可逆的问题,或者调用伪逆函数来进行计算,算法也能正确运行。
五、梯度下降与正规方程的优缺点比较
那么对于这两种方法我们应该如何选择呢,什么时候用梯度下降什么时候用正规方程?下面列举一些它们的优缺点
梯度下降 | 正规方程 |
需要选择学习率α | 不需要 |
需要多次迭代 | 一次运算得出 |
当特征数量大时也能较好适用 | 需要计算矩阵相乘以及矩阵的逆,如果特征数量较大则运算代价大,因为矩阵逆的计算时间复杂度为n3,通常来说当小于10000 时还是可以接受的 |
适用于各种类型的模型 | 只适用于线性模型,不适合逻辑回归模型等其他模型 |
总结一下,只要特征变量的数目并不大,正规方程是一个很好的计算参数的替代方法,现在的电脑计算个千维矩阵还是压力不大的。