很多线性回归器的损失函数为均方误差:
loss=∥Xw−y∥22
求解模型参数,需要最小化损失函数:
min∥Xw−y∥22
X∈Rm∗n,w∈Rn,y∈Rm
该类问题分为三种情况:
1.m=n且X为非奇异矩阵,这时 Xw=y 有唯一解: w=X−1y
2.m>n,即约束个数大于方程个数,此时 Xw=y 无解,该类问题称为超定问题。
3.m<n,即约束个数小于方程个数,此时 Xw=y 有无穷解该类问题称为欠定问题
在机器学习中,绝大部分问题都是样本数大于特征数,对应于超定问题,并且一般情况下为非一致方程,此时方程无解(一致方程的超定问题是有解的,通过求解广义逆矩阵),因此转向求解最小二乘问题,即最小化
∥Xw−y∥22
,将其转化为矩阵形式,求导,另导数为0,可以解得:
w=(XTX)−1XTy
推导见: 线性最小二乘求解
这种求解方式有几个问题:
1. 涉及到n*n维矩阵的求逆运算,实际使用中计算量巨大。
2. XTX 可能不可逆,这个可以用 l2正则或者求解 伪逆的形式解决。
SVD奇异值分解
不同于特征值分解使用的情景受限,对于任意一个矩阵
A∈Rm∗n
,都可以分解为:
svd(A)=[U][S][VT]
其中: U∈Rm∗m,S∈Rm∗n,V∈Rn∗n
U 的列向量为
证明:
AAT=USVT(USVT)T=US(VTV)STUT=U(SST)UT
(AAT)U=Σ¯U
ATA同
再来看最小二乘问题:
∥Xw−y∥22=∥U[Σ0]VTw−b∥=∥[Σ0]VTx−Uy∥
U 可以拆解为
=∥[Σ0]VTw−[Un,Um−n]Ty∥
=∥[ΣVTw−UTn−UTm−ny]∥
=∥ΣVTw−UTny∥+∥UTm−ny∥≥∥UTm−ny∥
也即当 ∥ΣVTw−UTny∥=0 时上式取等号,此时 ∥Xw−y∥22 取最小值,解得:
w=(ΣVT)−1UTny=VΣ−1UTny
按照SVD的方式必有解,这里 Σ 是对角矩阵,求逆很简单, U 和
通常情况下 Σ 是按照奇异值由大到小排列的,且衰减的特别快,一般前10%的奇异值之和就占到了总和的95%以上,因此我们可以将小于某个阈值的的奇异值及其对应的左右奇异向量全部舍弃掉,进而进一步的进行矩阵规模的缩减,在sklearn中就是采用的这种方式,只不过在求解 Σ 的逆矩阵时,阈值=1e-15,多用了一个alpha参数, Σ−1=Σ∥Σ+alpha∥ 。
特别地,对于齐次方程的超定问题:
min∥Xw∥
我们有:
∥Xw∥=wT(XTX)w
假设 w 为
min∥Xw∥=minλ2∥w∥=minλ2
因此我们需要求解的 w 即是