针对某些线性回归问题,除了梯度下降算法,有一个更好的方法来求出最优解,就是正规方程(Normal Equation)

与梯度下降算法采用求导,然后迭代计算的方法不同,正规方程采用的矩阵的求解,方便快捷,但也有一些弊端。

房价的例子:

$x_0$ 尺寸$x_1$ 房间数$x_2$ 房屋年份$x_3$ 价格$y$
1 2104 5 45 460
1 1416 3 40 232
1 1534 3 30 315
1 852 2 36 178

和之前不同的是,这个在前面加了一列$x_0$,而这一列的值都是1。

下面用矩阵的形式来展现这个数据集:
$$ X=\left[ \begin{matrix} 1 & 2104 & 5 & 45 \\ 1 & 1416 & 3 & 40 \\ 1 & 1534 & 3 & 30 \\ 1 & 852 & 2 & 36 \end{matrix} \right], y=\left[ \begin{matrix} 460 \\ 232 \\ 315 \\ 178 \end{matrix} \right] $$

$X$为$m \times (n+1)$维矩阵,$y$为$m$维向量

正规方程的公式为:
$$ \theta=(X^TX)^{-1}X^Ty $$

$X^T$ 是矩阵 $X$ 的转置,$(X^TX)^{-1}$ 是矩阵 $X^TX$ 的逆矩阵

通过这个公式的到的$\theta$ 会最小化线性回归的代价函数 $J(\theta)$,和梯度下降算法不同的是,正规方程不需要采用特征值缩放。

何时采用正规方程,何时采用梯度下降

这是两种算法之间的差距

梯度下降 正规方程
学习率($\alpha$) 需要选择学习率($\alpha$) 不需要学习率($\alpha$)
迭代 需要迭代很多次 不需要迭代
复杂度 $O(kn^2)$ $O(n^3)$,因为需要计算$(X^TX)^{-1}$
多特征值 当特征值n非常大时,性能好 当特征值n非常大时,性能差

正规方程不需要选择学习率($\alpha$),也不要迭代很多次,这点在计算的繁琐程度上是优于梯度下降的。
正规方程的劣势是在计算 $(X^TX)^{-1}$ 这个公式上面,$X$是一个$m \times (n+1)$的矩阵,那么$X^TX$则为$m$维的方阵,这个过程的复杂度相当于$O(n^2)$,在计算该矩阵的逆矩阵,就相当于$O(n^3)$的复杂度。当n很大时,正规方程的复杂度就比梯度下降大得多,也就更加耗时。

用此当n较大时,选择梯度下降性能会更好;当n较小时,选择正规方程会更好的计算$\theta$。

在实践中,当n超过10000时,可以考虑选择梯度下降算法。

关于逆矩阵的一些问题

在求解 $(X^TX)$ 的逆矩阵时,可能会遇到该矩阵不可逆,造成这种情况的原因是:

  • 在特征值中有冗余的特征,例如在预测房价中,有一列特征值是以平方英尺为单位计算的房子大小,又有一列是以平方米的单位来计算房子大小,这样两个特征值就是冗余的,两个只要取其中一个就好了;
  • 特征值过多,当特征值大于样本数时,即$m\leq n$。遇到这样的,删掉一个关联不大的特征值,或者使用正则化(regularization)来解决。