已知有一个这样的方程组:
Ax=b A x = b
其中 A∈Rm×n A ∈ R m × n ; x∈Rn×k x ∈ R n × k , b∈Rm×k b ∈ R m × k
当 m=n m = n 时,且 ranA=n r a n A = n 时,这是一个适定方程组,有唯一解 x=A−1b x = A − 1 b
当 m<n m < n 时,或者 ranA<n r a n A < n 时,这是一个欠定方程组,有无穷多个解。对于这种情况,我们使用 ran(A) r a n ( A ) 中与 b b 距离最近的向量对应的 x x 作为最小二乘解。而相应的 ran(A) r a n ( A ) 中的这个向量就是 b b 在空间 ran(A) r a n ( A ) 中的投影。
当 m>n m > n 时,即方程的个数大于未知数的个数,最小二乘超定系统问题。
超定问题是最小二乘的关键,最小二乘的的意思就是最小化残差(residual)的平方和。
给定 m m 个数据, (a1,b1) ( a 1 , b 1 ) , (a2,b2) ( a 2 , b 2 ) ,…, (am,bm) ( a m , b m ) , 以及一个模型函数 b=f(a,x) b = f ( a , x ) ,其中 {x1,x2,...,xn} { x 1 , x 2 , . . . , x n } 就是要估计的参数,该参数的估计就是通过最小化如下残差的平方和求得:
S=∑mi=1∥bi−f(ai,xi)∥2 S = ∑ i = 1 m ‖ b i − f ( a i , x i ) ‖ 2
其中残差为 ri=bi−f(ai,xi) r i = b i − f ( a i , x i ) 根据残差函数关于未知参数是否线性,可以最把小二乘分为线性最小二乘和非线性最小二乘。
我们一般讨论的是线性最小二乘法。
线性最小二乘是解决线性回归问题的常用方法,有一个闭式解。线性最小二乘残差函数可以表示为: ri=bi−aixi r i = b i − a i x i
如图所示, b b 不在 rand(A) r a n d ( A ) 中,所以 Ax_0 是 是 ran(A) 空间对向量 空 间 对 向 量 b$ 在欧式空间范数下的最好估计。此时
∀x∈Rn,(Ax,b−Ax0)=0 ∀ x ∈ R n , ( A x , b − A x 0 ) = 0
等价于 xTAT(b−Ax0)=0 x T A T ( b − A x 0 ) = 0
由于x的任意性,所以
AT(b−Ax0)=0 A T ( b − A x 0 ) = 0
整理得 x0=(ATA)−1ATb=A+b x 0 = ( A T A ) − 1 A T b = A + b
其中 A+=(ATA)−1AT A + = ( A T A ) − 1 A T 称为 A A 的伪逆矩阵。
原问题等价于: min∥Ax−b∥22 m i n ‖ A x − b ‖ 2 2
记 f(x)=∥Ax−b∥22=(Ax−b)T(Ax−b)=xTATAx−2bTAx+bTb f ( x ) = ‖ A x − b ‖ 2 2 = ( A x − b ) T ( A x − b ) = x T A T A x − 2 b T A x + b T b ,对 x 求导得:
Δf=2(ATAx−ATb)=0 Δ f = 2 ( A T A x − A T b ) = 0
解得, x=(ATA)−1ATb=A+b x = ( A T A ) − 1 A T b = A + b
原问题: min∥Ax−b∥ m i n ‖ A x − b ‖ , ∥..∥ ‖ . . ‖ 代表范数,取欧几里德范数,让每个方程的误差平方和最小,就是求取解 xi x i 使得 Ax−b A x − b 的误差最小,即等式最逼近真实值。
将矩阵 A A 进行SVD分解: A=UΣ2VT A = U Σ 2 V T ,矩阵 A 的伪逆矩阵为 X+=VΣ+UT X + = V Σ + U T ;
所以 x=X+b=VΣ+UTb x = X + b = V Σ + U T b ,其中, Σ+ Σ + 是 Σ Σ 的伪逆矩阵,可以通过对其对角线的元素求倒数,然后转置得到。
x=VΣ+UTb x = V Σ + U T b
将矩阵 A∈Rm×n A ∈ R m × n 进行QR分解: Q Q 为一个 m×n 的正交矩阵, R R 为一个 n×n 的下三角矩阵,
将误差写成如下形式: r=b−Ax r = b − A x ,再对矩阵 A A 进行 QR Q R 分解,得 A=QR A = Q R ,
则误差式可以写成: r=b−QRx r = b − Q R x ;等式两边同时左乘一个 QT Q T 矩阵,得 QTr=QTb−QTQRx Q T r = Q T b − Q T Q R x ;由于 QTQ Q T Q 是一个 m×m 的单位矩阵,所以可以分为两个部分:n×n 和 (m-n)×(m-n) ,分别用 u u 和 v v 表示,这样残差平方和函数变为:
S=∥r∥2=rTr=rTQQTr=uTu+vTv S = ‖ r ‖ 2 = r T r = r T Q Q T r = u T u + v T v
由于 v∈R(m−n)×(m−n) v ∈ R ( m − n ) × ( m − n ) 和 x∈Rn×k x ∈ R n × k 没有关系,所以当 误差 u=0 u = 0 时,才能使得残差的平方和 S S 最小,即 因为 Rx=QTb R x = Q T b ; R R 为下三角矩阵,所以通过回代可以很容易地求解出 x x 的值。
最终: Rx=QTb R x = Q T b
在实际应用中,因为数值稳定性的要求 ,dense matrix 往往用QR求解 ,对于大型的稀疏矩阵则多用Cholesky分解(LU分解)。