正规方程
正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:
∂θj∂J(θi)=0
假设我们的训练集特征矩阵为
X(包含了 ?0 = 1)并且我们的训练集结果为向量
y,则利
用正规方程解出向量
θ=(XTX)−1XTy
比如如下的数据:
X=⎣⎢⎢⎡11112104141615348525332122145403036⎦⎥⎥⎤
y=⎣⎢⎢⎡460232315178⎦⎥⎥⎤
正规方程的Python实现:
import numpy as np
def normalEqn(X, y):
theta = np.linalg.inv(X.T@X)@X.T@y
return theta
与梯度下降比较
梯度下降 |
正规方程 |
需要选择学习率? |
不需要 |
需要多次迭代 |
一次运算得出 |
当特征数量?大时也能较好适用 |
需要计算
(XTX)−1。如果特征数量?较大则 运算代价大, 因为矩阵逆的计算时间复杂度 为?(?3) |
适用于各种类型的模型 |
只适用于线性模型,不适合逻辑回归模型等其他模型 |
矩阵不可逆时的情况
(XTX)会出现不可逆的情况。
原因可能有:
- 有多余的特征变量成了线性相关关系
比如一个特征是厘米单位的长度,而另一个特征是毫米单位的长度,两列数据在自乘之后成了100倍的线性关系。
这时就需要把多余的特征量删除。
- 有太多的特征量(m << n) 有时还会导致‘过拟合(overfit)’的现象
比如m = 10, n = 100时的情况,则需要在10个训练样本中找出101个参数,这是一种比较复杂且容易出问题的任务。
解决方法有:
①删除一些特征量
②正则化
附:正则方程推导过程
J(θ0,θ1,…,θn)=2m1i=1∑m (hθ(x(i))−y(i))2
转化为矩阵表示则有:
J(θ)=21(Xθ−y)T(Xθ−y)
=21(θTXT−yT)(Xθ−y)
=21(θTXTXθ−θTXTy−yTXθ+yTy)
接下来对
θ求偏导。要用到几个矩阵求导法则:
dBdAB=AT、
dXdATXA=2AX
所以有:
∂θ∂J(θ)=21(2XTXθ−XTy−(yTX)T+0)
=(XTXθ−XTy)
令其=0,可得:
θ=(XTX)−1XTy