在上节中通过一个预测房价的例子给出了一个一次的假设函数:。而在实际情况中假设函数可能需要多个特征(变量)x,因此在本节中将预测房价的例子进行些添加,从而引出多元线性回归函数,并对其中的参数进行分析,继而给出梯度下降算法中的实用技巧以及正规方程的介绍。
1. 多元线性回归函数如何表达?
本例中,影响房价的特征有多个,分别是房子大小、房间数量、楼层数以及房子已使用年限,这四个特征共同影响房子的价值,给出的训练集如下:
房子大小(平方英尺) | 房间数量 | 楼层数 | 房子已使用年限 | 房价 |
2104 | 5 | 1 | 45 | 460 |
1416 | 3 | 2 | 40 | 232 |
1534 | 3 | 2 | 30 | 315 |
852 | 2 | 1 | 36 | 178 |
参数:
:样本数量
:特征数
:第i个样本的特征向量
:第i个样本的第j个特征值
原本的假设函数为:
本例子的假设函数公式:
那么推广到一般假设函数公式为:
为了让形式更加统一,我们可以令=1,从而一般假设函数公式为:
令特征和参数用向量表达为:
那么:
上式称为多元线性回归(Multivariate linear regression)。
2. 如何计算梯度下降算法中的多个参数?
假设函数:
参数: (可由向量表示)
代价函数:
通用梯度下降算法:
当有多个参数时,我们可以把算法表达式扩展开,从而得到:
3. 梯度下降算法中的实用技巧
(1)特征缩放(feature scaling)
在计算代价函数时,如果各特征之间的范围精度差距很大,那么求出来的代价函数的等高线会变得非常歪斜且瘦长,除了观测方面的差距外,在运行梯度下降算法时,可能会需要更多次的迭代才能找到全局最小值,因此收敛速度会慢很多。
例如,现在有两个特征,为房子大小(范围为0~2000),为房间数量(1~5个),那么画出来的等高线可能会如下图:
那么我们进行特征缩放(将各特征除以它在训练集中存在的大致最大值):
注意:特征缩放的原则是让特征经过缩放后大致处于的范围(不必完全符合,但应大致为这个范围。例如可以,但不可以)
经过特征缩放后的代价函数的等高线图大致如下:
(2)均值归一化
均值归一化一般和特征缩放一起使用,与特征缩放的目的相同,也是为了减少收敛的迭代次数,更快的找到全局最小值。经过均值归一化后的特征值均值为0,范围为。仍旧使用(1)的特征做例子如下:
可以得到一个一般的均值归一化表达式:
:训练集中的均值
:训练集中的最大值
(3)选择合适的学习率
上节中已经讲到如果学习率过高或过低,都不利于收敛,学习率过低则收敛过程中需要迭代的次数大大增加,而学习率过高则甚至有可能造成函数无法收敛,从而找不到全局最小值。
应该如何判断选择的学习率是否合适?
可以通过得到迭代次数与其相应得到的代价函数值的曲线关系观察得出,如下图是正常的迭代次数与代价函数值关系曲线图:
在上图中,可以看到迭代次数为300次和400次时得到的代价函数几乎没有差别,此时就可以认为已经得到了最小代价函数,从而得到相应的各参数值。
并且由图也可以知道选择的学习率是比较合适的,如果选择的学习率比较小的话,迭代次数需要的更多,那么在迭代次数300到400之间可看到代价函数值仍在明显的下降;如果选择的学习率过大,那么得到的曲线则不规则,如下面俩图就是学习率过大,此时要选择更小的学习率。
4. 一定范围内可更方便解出参数的方法——正规方程
在现在已经学习的方法中,解出参数需要通过梯度下降算法中对含参公式求偏导(即本节问题2中给出的参数公式),然而当参数过多时,求偏导就变得较为麻烦。
举例来说,如果代价函数只含有一个参数,将特征设为常量,表达式为:
那么求最小值,需对求导并令其等于0: 便可求出的值。
而当参数增加为,为了求每个参数,分别要令,依次求出各个偏导的等式,就变得较为复杂。
正规方程的目的就是为了解决求微积分(偏导)过于复杂的问题,如何根据正规方程求出参数可以用本节最开始的预测房价的例子给出。
房子大小(平方英尺) | 房间数量 | 楼层数 | 房子已使用年限 | 房价 |
2104 | 5 | 1 | 45 | 460 |
1416 | 3 | 2 | 40 | 232 |
1534 | 3 | 2 | 30 | 315 |
852 | 2 | 1 | 36 | 178 |
分别用矩阵X表示表格中训练集的数据,用向量y表示表格中最后的房价值:
将需要求的参数作为向量[向量表达等式],则:
根据这个方程就可以一次性求出多个参数。
注意:但是正规方程并不是任何情况下都可以用的,尽管正规方程比起梯度下降算法中求偏导要方便、快速很多,但是正规方程不能应用在参数过多的情况下(参数数量在几千范围内可以使用,但是参数量上万时应开始不再使用正规方程),参数过多会导致其计算速度明显下降,而梯度下降算法在参数量很多时的工作效果仍旧比较可观,所以参数过多还是需要使用梯度下降算法。