梯度下降法是最小化损失函数的方法之一,它通过向梯度下降的方向不停的迭代,从而找到使损失函数最小或者趋于最小的值。而正规方程求解参数,使损失函数最小的方法,不会去依赖不停的迭代,而是直接通过计算来求得使损失函数最小的参数值。
在介绍方程之前,先引入导数矩阵的概念:
有一个函数f:它是m*n的矩阵到一个实数的映射,我们定义f关于自变量矩阵A的导数为:
▽Af(A)=⎡⎣⎢⎢⎢⎢⎢⎢⎢∂f∂A11⋮∂f∂Am1⋯⋱⋯∂f∂A1n⋮∂f∂Amn⎤⎦⎥⎥⎥⎥⎥⎥⎥(1)
可以看到(1)式中, ▽Af(A) 是一个m*n阶的矩阵,矩阵内的 (i,j) 元素是 ∂f∂Aij ,即函数 f 关于该矩阵内各个位置元素的偏导。这个矩阵就是导数矩阵。
再介绍一个矩阵的迹,它是一个n*n方阵的对角线上元素的和,即如果有一个n*n阶的方阵A,那么他的迹记(trA)为:
矩阵的 迹有如下性质:
trAB=trBA
trABC=trCAB=trBCA
trABCD=trDABC=trCDAB=trBCDA
关于矩阵的迹,我们设A和B是方正,a是一个实数,我们有以下性质:
trA=trAT
tr(A+B)=trA+trB
traA=atrA
结合以上的性质,我们可以得到下面的公式:
▽AtrAB=BT
▽ATf(A)=(▽Af(A))T(3)
▽AtrABATC=CAB+CTABT(4)
▽A|A|=|A|(A−1)T
有了以上知识为基础,现在把最小二乘法改写成矩阵的形式,以便实现算法。
把训练集中的特征值和目标值都用矩阵来表示,如特征值用矩阵来表示:
X=⎡⎣⎢⎢⎢⎢⎢—(x(1))T——(x(2))T—⋮—(x(m))T—⎤⎦⎥⎥⎥⎥⎥
数据集中的一个样本特征值就是X矩阵中的一行。
目标值用矩阵来表示:
y⃗ =⎡⎣⎢⎢⎢⎢⎢y(1)y(2)⋮y(m)⎤⎦⎥⎥⎥⎥⎥
那么 Xθ−y⃗ 就可以表示如下所示:
Xθ−y⃗ =⎡⎣⎢⎢⎢⎢⎢(x(1))Tθ(x(2))Tθ⋮(x(m))Tθ⎤⎦⎥⎥⎥⎥⎥−⎡⎣⎢⎢⎢⎢⎢y(1)y(2)⋮y(m)⎤⎦⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢hθ(x(1))−y(1)hθ(x(2))−y(2)⋮hθ(x(m))−y(m)⎤⎦⎥⎥⎥⎥⎥
最小乘法就可以写成如下形式:
J(θ)=12∑i=1n(hθ(x(i))−y(i))2=12(Xθ−y⃗ )T(Xθ−y⃗ )
根据公式(3) (4)可以推导出:
∇ATtrABATC=BTATCT+BATC
所以我们对损失函数构成的矩阵求导:
∇θJ(θ)=∇θ12(Xθ−y⃗ )T(Xθ−y⃗ )=12∇θ(θTXTXθ−θTXTy⃗ −y⃗ TXθ+y⃗ Ty⃗ )=12∇θtr(θTXTXθ−θTXTy⃗ −y⃗ TXθ+y⃗ Ty⃗ )=12∇θ(trθTXTXθ−2try⃗ TXθ)=12(XTXθ+XTXθ−2XTy⃗ )=XTXθ−XTy⃗
为了求得损失函数 J(θ) 的最小值,我们令导数等于零,则可以得到 正规方程(normal equations)
XTXθ=XTy⃗
因此,使得损失函数 J(θ) 达到最小值的参数θ就可以通过下面等式得出:
θ=(XTX)−1XTy⃗