机器学习|线性回归的正规方程法

正规方程 正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:? ? θ j J ( θ i ) = 0 \frac{\partial}{\partial \theta_j} J(\theta_i) = 0 ?θj???J(θi?)=0
假设我们的训练集特征矩阵为X X X(包含了 ?0 = 1)并且我们的训练集结果为向量y y y,则利
用正规方程解出向量θ = ( X T X ) ? 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)?1XTy
比如如下的数据:
机器学习|线性回归的正规方程法
文章图片

X = [ 1 2104 5 1 45 1 1416 3 2 40 1 1534 3 2 30 1 852 2 1 36 ] X = \begin{bmatrix} 1 & 2104 & 5 & 1 & 45\\ 1 & 1416 & 3 & 2 & 40\\ 1 & 1534 & 3 & 2 & 30 \\ 1 & 852 & 2 & 1 & 36 & \\ \end{bmatrix} X=?????1111?210414161534852?5332?1221?45403036???????
y = [ 460 232 315 178 ] y = \begin{bmatrix} 460\\ 232\\ 315\\ 178\\ \end{bmatrix} y=?????460232315178??????


正规方程的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 T X ) ? 1 (X^TX)^-1 (XTX)?1。如果特征数量?较大则 运算代价大,
因为矩阵逆的计算时间复杂度 为?(?3)
适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型等其他模型
矩阵不可逆时的情况 ( X T X ) (X^TX) (XTX)会出现不可逆的情况。
原因可能有:
  1. 有多余的特征变量成了线性相关关系
    比如一个特征是厘米单位的长度,而另一个特征是毫米单位的长度,两列数据在自乘之后成了100倍的线性关系。
    这时就需要把多余的特征量删除。
  2. 有太多的特征量(m << n) 有时还会导致‘过拟合(overfit)’的现象
    比如m = 10, n = 100时的情况,则需要在10个训练样本中找出101个参数,这是一种比较复杂且容易出问题的任务。
    解决方法有:
    ①删除一些特征量
    正则化

附:正则方程推导过程 J ( θ 0 , θ 1 , … , θ n ) = 1 2 m ∑ i = 1 m( h θ ( x ( i ) ) ? y ( i ) ) 2 J(\theta_0,\theta_1,\dots,\theta_n) = \frac {1}{2m}\sum_{i=1}^{m}\ (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ0?,θ1?,…,θn?)=2m1?i=1∑m? (hθ?(x(i))?y(i))2
转化为矩阵表示则有:
J ( θ ) = 1 2 ( X θ ? y ) T ( X θ ? y ) J(\theta) = \frac{1}{2} (X\theta-y)^T(X\theta-y) J(θ)=21?(Xθ?y)T(Xθ?y)
= 1 2 ( θ T X T ? y T ) ( X θ ? y ) \ \ \ \ \ \ = \frac{1}{2} (\theta^TX^T-y^T)(X\theta-y)=21?(θTXT?yT)(Xθ?y)
= 1 2 ( θ T X T X θ ? θ T X T y ? y T X θ + y T y ) \ \ \ \ \ \ = \frac{1}{2} (\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta + y^Ty)=21?(θTXTXθ?θTXTy?yTXθ+yTy)


接下来对 θ \theta θ求偏导。要用到几个矩阵求导法则:
d A B d B = A T \frac{dAB}{dB} = A^T dBdAB?=AT、 d A T X A d X = 2 A X \frac{dA^TXA}{dX}=2AX dXdATXA?=2AX
所以有:
? ? θ J ( θ ) = 1 2 ( 2 X T X θ ? X T y ? ( y T X ) T + 0 ) \frac{\partial}{\partial \theta} J(\theta) = \frac{1}{2}(2X^TX\theta - X^Ty -(y^TX)^T+0) ?θ??J(θ)=21?(2XTXθ?XTy?(yTX)T+0)
= ( X T X θ ? X T y ) = (X^TX\theta - X^Ty) =(XTXθ?XTy)
【机器学习|线性回归的正规方程法】令其=0,可得:
θ = ( X T X ) ? 1 X T y \theta = (X^TX)^{-1}X^Ty θ=(XTX)?1XTy

    推荐阅读