线性回归的正规方程法

正规方程


正规方程是通过求解下面的方程来找出使得代价函数最小的参数的: ∂ ∂ θ j J ( θ i ) = 0 \frac{\partial}{\partial \theta_j} J(\theta_i) = 0 θjJ(θ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

比如如下的数据:
线性回归的正规方程法_第1张图片
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=11112104141615348525332122145403036
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)=2m1i=1m (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(θTXTyT)(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θθTXTyyTXθ+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

你可能感兴趣的:(机器学习,机器学习,正规方程)