正规方程


正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:

假设我们的训练集特征矩阵为 $X$(包含了 $\theta_0 = 1$)并且我们的训练集结果为向量 $y$,则利
用正规方程解出向量 $$ \theta = (X^TX)^{-1}X^Ty$$

比如如下的数据:

在这里插入图片描述
在这里插入图片描述





正规方程的Python实现:

import numpy as np 

def normalEqn(X, y):    
    theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X等价于 X.T.dot(X) 
    return theta 



与梯度下降比较


梯度下降正规方程
需要选择学习率?不需要
需要多次迭代一次运算得出
当特征数量?大时也能较好适用需要计算$(X^TX)^-1$。如果特征数量?较大则 运算代价大,
因为矩阵逆的计算时间复杂度 为?(?3)
适用于各种类型的模型只适用于线性模型,不适合逻辑回归模型等其他模型

矩阵不可逆时的情况


$(X^TX)$会出现不可逆的情况。
原因可能有:

  1. 有多余的特征变量成了线性相关关系
    比如一个特征是厘米单位的长度,而另一个特征是毫米单位的长度,两列数据在自乘之后成了100倍的线性关系。

这时就需要把多余的特征量删除。

  1. 有太多的特征量(m << n) 有时还会导致‘过拟合(overfit)’的现象
    比如m = 10, n = 100时的情况,则需要在10个训练样本中找出101个参数,这是一种比较复杂且容易出问题的任务。

解决方法有:

①删除一些特征量

正则化

附:正规方程推导过程


$$ J(\theta_0,\theta_1,\dots,\theta_n) = \frac {1}{2m}\sum_{i=1}^{m}\ (h_\theta(x^{(i)}) - y^{(i)})^2 $$
转化为矩阵表示则有:
$$J(\theta) = \frac{1}{2} (X\theta-y)^T(X\theta-y)$$
$$\ \ \ \ \ \ = \frac{1}{2} (\theta^TX^T-y^T)(X\theta-y)$$
$$\ \ \ \ \ \ = \frac{1}{2} (\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta + y^Ty)$$



接下来对$\theta$求偏导。要用到几个矩阵求导法则:
$\frac{dAB}{dB} = A^T$、$\frac{dA^TXA}{dX}=2AX$

所以有:

令其=0,可得:
$$ \theta = (X^TX)^{-1}X^Ty$$