多变量线性回归
\[h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2\ + \cdots + \theta_n x_n\]
令\(x_0 = 0\),上述公式可以简化为:
\[h_\theta(x) = \theta^TX\]
多变量梯度下降
\[\theta_j := \theta_j - \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1,\cdots,\theta_n)\]
求导后,即为:
\[\theta_j := \theta_j - \alpha\frac{1}{m}\sum_{i=1}^m((h_\theta(x_{(i)})-y_{(i)})\times x_j^{(i)})\]
梯度下降法实践I:特征缩放 (Feature scaling)
在同一个问题中,不同的特征可能具有相差很大的尺度(如\([1,5]\)和\([0,2000]\)),此时代价函数的等高线图会显得很扁,梯度下降法也需要很多次迭代才能够收敛。因此我们需要将它们缩放到同一范围内:\([-1,1]\),以帮助加快收敛速度。
最简单的方法是令:\(x_n = \frac{x_n-\mu_n}{s_n}\),其中\(\mu_n\)是均值,\(s_n\)可以是该特征的range,也可以是标准差。
而对于一些相差范围不是太大的特征(\([-\frac13,\frac13]\)至\([-3,3]\)内),即使不做缩放也是可以接受的。
梯度下降法实践II:学习速率 (Learning Rate)
对于不同模型,我们可以画出以迭代次数和代价函数为坐标轴的函数图标来观察算法在何时趋于收敛。另外,我们也能设定一个阀值(如\(J(\theta)\)在每一次迭代中的变化量少于\(10^{-3}\))以自动检测是否收敛。
如何选择合适的Learning Rate \(\alpha\):
- 如果\(\alpha\)过大,则\(J(\theta)\)可能会出现随着迭代次数递增的情况。
- 如果\(\alpha\)过小,则\(J(\theta)\)下降速度很慢。
- 通常可以尝试以下数值:\(0.001,0.003,0.01,0.03,0.1,0.3,1,3,10...\)
正规方程 (Normal Equation)
使用正规方程求参数集\(\theta\)
梯度下降法需要不断调整参数,已达到最低的Cost Function;而正规方程则可以一步到位求出最优解。
正规方程所要做的是求解方程:\[\frac{\partial}{\partial\theta_j}J(\theta_j) = 0\]
更简单地说,假设我们有\(m\)个测试样本以及\(n\)个特征,记\(m \times (n+1)\)的矩阵\(X\)为特征矩阵,\(m\)维的向量\(y\)为训练集的输出结果,则最优的参数向量为:
\[\theta = (X^TX)^{-1}X^Ty\]
当然正规方程的方法也有不足,下面对两种方法进行优劣比较:
梯度下降法 | 正规方程 |
---|---|
需要选择\(\alpha\) | 不需要选择\(\alpha\) |
需要许多迭代 | 一次计算得出结果 |
需要Feature scaling | 不需要Feature scaling |
当\(n\)很大时也能使用 | 需要计算\((X^TX)^{-1}\),时间复杂度为\(O(n^3)\),当\(n<10000\)时可以使用 |
适用于各种不同模型 | 只适用于线性回归模型 |
总结: 在线性回归模型中,且\(n\)较小的情况下,正规方程是一种更快、更好的方案。而对于很多其他算法,正规方程不能使用,则依然只能使用梯度下降法。
矩阵的不可逆性
上一节我们求出,最优的参数集为
\[\theta = (X^TX)^{-1}X^Ty\]
而如果其中的\((X^TX)\)不可逆时该怎么办?
这个问题很少发生,在这里的情形中,主要发生于以下两种情况:
- 线性相关的两个特征向量。比如说,有\(x_1\)表示某房子用平方英尺表示的面积,而\(x_2\)同样表示面积,只不过单位为平方米。此时,两个不同的参数看似不同,但只是单位不同,实质上是线性相关的,故会产生\((X^TX)\)不可逆的情况。这种情况下,解决方案是删除冗余的、线性相关的特征。
- 特征过多 (\(m<n\))。此时,测试样本过少,常常不足以满足\(n+1\)个特征参数。解决方案是删除一些特征,或将特征标准化(regularization)。