最小二乘法(Least Squares)

最小二乘法(Least Squares)

  实际问题中常出现 A x = b Ax=b Ax=b不相容(无解)的情况,这时候就希望找到近似解 x x x,使得 A x Ax Ax尽量接近 b b b

  定义:如果 m × n m\times n m×n的矩阵 A A A和向量 b b b属于 R m R^m Rm,则 A x = b Ax=b Ax=b的最小二乘解(Least Squares Solutions)是 R n R^n Rn中的 x ^ \hat{x} x^,使得 ∣ ∣ b − A x ^ ∣ ∣ ≤ ∣ ∣ b − A x ∣ ∣ ||b-A\hat{x}||\le ||b-Ax|| bAx^bAx对所有的 x ∈ R n x\in R^n xRn都成立。

  最小二乘解的最终要的特征是,无论怎么选取 x x x,向量 A x Ax Ax必然属于列空间 C o l   A Col\space A Col A,所以需要寻找 x x x使得 A x Ax Ax C o l   A Col\space A Col A中最接近 b b b的点。

  定理:方程 A x = b Ax=b Ax=b的最小二乘解集和法方程 A T A x = A T b A^TAx=A^Tb ATAx=ATb的非空解集一致。

  注意,这里 A T A x = A T b A^TAx=A^Tb ATAx=ATb称为 A x = b Ax=b Ax=b的法方程(normal equations),此法方程的解给出所有 A x = b Ax=b Ax=b的最小二乘解,在统计学中常记为 X T X β = x T y X^TX\beta=x^Ty XTXβ=xTy

例1:求不相容方程组 A x = b Ax=b Ax=b的最小二乘解,其中 A = [ 4 0 0 2 1 1 ] A=\begin{bmatrix}4&0\\0&2\\1&1\end{bmatrix} A=401021 b = [ 2 0 11 ] b=\begin{bmatrix}2\\0\\11\end{bmatrix} b=2011

解:

由法方程得:
A T A x = A T b A^TAx=A^Tb ATAx=ATb

A T A = [ 4 0 1 0 2 1 ] [ 4 0 0 2 1 1 ] = [ 17 1 1 5 ] A^TA=\begin{bmatrix}4&0&1\\0&2&1\end{bmatrix}\begin{bmatrix}4&0\\0&2\\1&1\end{bmatrix}=\begin{bmatrix}17&1\\1&5\end{bmatrix} ATA=[400211]401021=[17115]

A T b = [ 4 0 1 0 2 1 ] [ 2 0 11 ] = [ 19 11 ] A^Tb=\begin{bmatrix}4&0&1\\0&2&1\end{bmatrix}\begin{bmatrix}2\\0\\11\end{bmatrix}=\begin{bmatrix}19\\11\end{bmatrix} ATb=[400211]2011=[1911]

A T A x = A T b A^TAx=A^Tb ATAx=ATb可以变为:

[ 17 1 1 5 ] [ x 1 x 2 ] = [ 19 11 ] \begin{bmatrix}17&1\\1&5\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix}=\begin{bmatrix}19\\11\end{bmatrix} [17115][x1x2]=[1911]

由于 A T A A^TA ATA的秩为2,可逆,所以可求得 ( A T A ) − 1 = 1 84 [ 5 − 1 − 1 17 ] (A^TA)^{-1}=\frac{1}{84}\begin{bmatrix}5&-1\\-1&17\end{bmatrix} (ATA)1=841[51117]

A T A x = A T b A^TAx=A^Tb ATAx=ATb可以解得: x = x ^ = ( A T A ) − 1 A T b = 1 84 [ 5 − 1 − 1 17 ] [ 19 11 ] = [ 1 2 ] x=\hat{x}=(A^TA)^{-1}A^Tb=\frac{1}{84}\begin{bmatrix}5&-1\\-1&17\end{bmatrix}\begin{bmatrix}19\\11\end{bmatrix}=\begin{bmatrix}1\\2\end{bmatrix} x=x^=(ATA)1ATb=841[51117][1911]=[12]

例2:求方程组 A x = b Ax=b Ax=b的最小二乘解,其中:
A = [ 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 ] A=\begin{bmatrix}1&1&0&0\\1&1&0&0\\1&0&1&0\\1&0&1&0\\1&0&0&1\\1&0&0&1\end{bmatrix} A=111111110000001100000011 b = [ − 3 − 1 0 2 5 1 ] b=\begin{bmatrix}-3\\-1\\0\\2\\5\\1\end{bmatrix} b=310251

解:

A T A = [ 6 2 2 2 2 2 0 0 2 0 2 0 2 0 0 2 ] A^TA=\begin{bmatrix}6&2&2&2\\2&2&0&0\\2&0&2&0\\2&0&0&2\end{bmatrix} ATA=6222220020202002

MATLAB求 A A A的秩为3,所以 A A A不可逆。

A T b = [ 4 − 4 2 6 ] A^Tb=\begin{bmatrix}4\\-4\\2\\6\end{bmatrix} ATb=4426

由于无法求出 ( A T A ) − 1 (A^TA)^{-1} (ATA)1,所以可以通过增广矩阵化简的方法求 ( A T A ) x = ( A T b ) (A^TA)x=(A^Tb) (ATA)x=(ATb)的通解:

[ 6 2 2 2 4 2 2 0 0 − 4 2 0 2 0 2 2 0 0 2 6 ] → [ 1 0 0 1 3 0 1 0 − 1 − 5 0 0 1 − 1 − 2 0 0 0 0 0 ] \begin{bmatrix}6&2&2&2&4\\2&2&0&0&-4\\2&0&2&0&2\\2&0&0&2&6\end{bmatrix}\rightarrow \begin{bmatrix}1&0&0&1&3\\0&1&0&-1&-5\\0&0&1&-1&-2\\0&0&0&0&0\end{bmatrix} 6222220020202002442610000100001011103520

通解也是 A x = b Ax=b Ax=b的最小二乘解为:

x = [ x 1 x 2 x 3 x 4 ] = [ 3 − 5 − 2 0 ] + x 4 [ − 1 1 1 1 ] x=\begin{bmatrix}x_1\\x_2\\x_3\\x_4\end{bmatrix}=\begin{bmatrix}3\\-5\\-2\\0\end{bmatrix}+x_4\begin{bmatrix}-1\\1\\1\\1\end{bmatrix} x=x1x2x3x4=3520+x41111

使用QR分解求最小二乘解

  定理:如果 m × n m\times n m×n的矩阵 A A A的各列线性无关, A = Q R A=QR A=QR是矩阵 A A A的QR分解(其中 Q Q Q为一个 m × n m\times n m×n的矩阵,其各列形成Col A的一个标准正交基, R R R是一个 n × n n\times n n×n的上三角可逆矩阵,且在对角线上的元素为正数),那么对每一个属于 R m R^m Rm b b b,方程 A x = b Ax=b Ax=b有唯一的最小二乘解 x ^ = R − 1 Q T b \hat{x}=R^{-1}Q^Tb x^=R1QTb

  又因为上面的 R R R是一个上三角矩阵,所以 x ^ = R − 1 Q T b \hat{x}=R^{-1}Q^Tb x^=R1QTb可变形为
R x ^ = Q T b R\hat{x}=Q^Tb Rx^=QTb,解这个形式的方程计算量更小。

例:求方程组 A x = b Ax=b Ax=b的最小二乘解,其中:
A = [ 1 3 5 1 1 0 1 1 2 1 3 3 ] A=\begin{bmatrix}1&3&5\\1&1&0\\1&1&2\\1&3&3\end{bmatrix} A=111131135023 b = [ 3 5 7 − 3 ] b=\begin{bmatrix}3\\5\\7\\-3\end{bmatrix} b=3573

使用MATLAB求QR分解求得:

A =

       1              3              5       
       1              1              0       
       1              1              2       
       1              3              3       

>> [Q R]=qr(A)

Q =

      -1/2            1/2           -1/2           -1/2     
      -1/2           -1/2            1/2           -1/2     
      -1/2           -1/2           -1/2            1/2     
      -1/2            1/2            1/2            1/2     


R =

      -2             -4             -5       
       0              2              3       
       0              0             -2       
       0              0              0   

A = [ − 1 2 1 2 − 1 2 − 1 2 − 1 2 − 1 2 1 2 − 1 2 − 1 2 − 1 2 − 1 2 1 2 − 1 2 1 2 1 2 1 2 ] [ − 2 − 4 − 5 0 2 3 0 0 − 2 0 0 0 ] = [ 1 3 5 1 1 0 1 1 2 1 3 3 ] A=\begin{bmatrix}-\frac{1}{2}&\frac{1}{2}&-\frac{1}{2}&-\frac{1}{2}\\-\frac{1}{2}&-\frac{1}{2}&\frac{1}{2}&-\frac{1}{2}\\-\frac{1}{2}&-\frac{1}{2}&-\frac{1}{2}&\frac{1}{2}\\-\frac{1}{2}&\frac{1}{2}&\frac{1}{2}&\frac{1}{2}\end{bmatrix}\begin{bmatrix}-2&-4&-5\\0&2&3\\0&0&-2\\0&0&0\end{bmatrix}=\begin{bmatrix}1&3&5\\1&1&0\\1&1&2\\1&3&3\end{bmatrix} A=21212121212121212121212121212121200042005320=111131135023

经验算,上述QR分解(由于QR分解不是唯一的,上述分解可能和手算不一致)是正确的。

>> QT = Q.'

QT =

      -1/2           -1/2           -1/2           -1/2     
       1/2           -1/2           -1/2            1/2     
      -1/2            1/2           -1/2            1/2     
      -1/2           -1/2            1/2            1/2  
b =

       3       
       5       
       7       
      -3       

>> QT*b

ans =

      -6       
      -6       
      -4       
      -2  

可见如果用MATLAB的QR分解得到的矩阵,就会有

R x = Q T b Rx=Q^Tb Rx=QTb

[ − 2 − 4 − 5 0 2 3 0 0 − 2 0 0 0 ] [ x 1 x 2 x 3 ] = [ − 6 − 6 − 4 − 2 ] \begin{bmatrix}-2&-4&-5\\0&2&3\\0&0&-2\\0&0&0\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}-6\\-6\\-4\\-2\end{bmatrix} 200042005320x1x2x3=6642

增广矩阵:
[ − 2 − 4 − 5 − 6 0 2 3 − 6 0 0 − 2 − 4 ] → [ 1 0 0 10 0 1 0 − 6 0 0 1 2 ] \begin{bmatrix}-2&-4&-5&-6\\0&2&3&-6\\0&0&-2&-4\end{bmatrix}\rightarrow \begin{bmatrix}1&0&0&10\\0&1&0&-6\\0&0&1&2\end{bmatrix} 2004205326641000100011062

解得 R x = Q T b Rx=Q^Tb Rx=QTb的最小二乘解 x ^ \hat{x} x^为:

x ^ = [ 10 − 6 2 ] \hat{x}=\begin{bmatrix}10\\-6\\2\end{bmatrix} x^=1062

你可能感兴趣的:(线性代数,matlab)