在很多时候,我们在求解Ax=b方程时,如果A的列数太多,混入一些不准确的数据,此时方程时无解的,我们需要求解出最优解。这时候就需要使用最小二乘法来进行拟合。在讲解最小二乘法之前需要一些知识作为铺垫。
四个基本子空间
首先我们知道,对于一个m×n的矩阵A有四个子空间:列空间、行空间、零空间、左零空间。
列空间 (C(A)):列空间是Rm的子空间,是矩阵A的列向量的线性组合的集合构成的空间,每个列向量有m个分量,设矩阵A的秩为r,则A有r个主列,这r个主列就是列空间的一组基,一组基中有r个向量,所以列空间维数是r。
行空间(C(AT)):行空间是Rn的子空间,是矩阵A各行向量的线性组合的集合构成的空间,可以化为A转置的列空间,因此行空间的秩也是r,每个行向量有n个分量,所以行空间的维数也是r。
零空间(N(A)):零空间是Rn的子空间,是由Ax=0的解所构成的空间。由于x本质是A列向量的线性组合,A一共有n个列向量,所以A的秩为r时,自由列有n−r列,x中有n−r个自由变元,也就有n−r个基向量,因此维数也是n−r。
左零空间(N(AT)):左零空间是Rm的子空间,是由ATy=0的解的线性组合构成的空间,维数为m−r。
子空间与正交
接着,我们会发现,这四个子空间中存在正交关系。我们知道,在空间中证明两个向量是正交关系只需要判断两向量的内积是否为0。那么在子空间中也是如此。空间的正交定义是:一个空间中的任意一个向量都与另一个空间中的任意一个向量正交。
零空间与行空间是正交的,证明起来非常容易。我们将Ax=0写成下图的形式,很轻易就能证明,每一个行向量乘上x向量都为0,由于行向量是行空间的一组基,因此可以代表全部的行向量,这就满足了空间正交的定义。
⎣⎢⎢⎢⎢⎡R1R2......Rm⎦⎥⎥⎥⎥⎤⎣⎢⎢⎡x1x2......⎦⎥⎥⎤=⎣⎢⎢⎢⎢⎡R1(x1,x2...)R2(x1,x2...)........................Rm(x1,x2...)⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡00..0⎦⎥⎥⎥⎥⎤
不光行空间与零空间是正交关系,我们也可以轻易推出列空间和左零空间也是正交关系。
我们假设在一个R3空间中,不难想象,假设矩阵A的行空间是二维平面(r=2),那么其零空间就是一条线(n−r=1),又因为是正交关系,所以可知,零空间就是行空间二维平面的法向。因此,行空间与零空间之间关系类似于将空间一分为二,得到两个正交的子空间,我们把这称为Rn空间的正交补。
子空间投影
向量-向量的投影问题
图1: 向量-向量投影问题。图片来源:作者自制
如图1,p为b在a上的投影,写作p=xa(x为倍数),根据向量减法得到,投影方向e=b−p。根据向量正交则内积为零的性质(a垂直于e)可得
aTe=aT(b−p)=aT(b−ax)=0
这时再将p=xa带入,可得
p=aaTaaTb=aTaaaTb
这里我们可以将aTaaaT看作一个矩阵,称为投影矩阵P。
向量-平面的投影问题
如图2,a1,a2为构成平面的一组基,p在平面上。所以有p=x1^a1+x2^a2,或者直接写作p=Ax^,A=[a1a2](其中an为列向量),x^=[x1^x2^]。
图2: 向量-平面投影问题。图片来源:作者自制
由于e是垂直于平面的向量,e=b−p,那么我们可以用内积形式表达e和a1、a2的垂直关系:a1T(b−Ax^)=0、a2T(b−Ax^)=0,写成矩阵形式得:
[a1Ta2T](b−Ax^)=[00]
即
AT(b−Ax^)=0
上文已述,列空间与左零空间是正交关系,图2中的向量a1、a2正是列空间中的向量,e又垂直于这个平面,也就是说,e位于A的左零空间中。
我们继续展开式子:
ATb−ATAx^=0
得到:
x^=(ATA)−1ATb
代入p=Ax^得:
p=Ax^=A(ATA)−1ATb
这样我们就得到了向量p与向量b之间的投影关系,进而得到了投影矩阵:
P=A(ATA)−1AT
这也是投影矩阵的一般情况。那么P有哪些性质呢?我们知道ATA是一个n×n矩阵,并且是可逆的对称矩阵。对称矩阵的转置还是它本身,因此观察公式我们能得出
接着,根据图像,如果我们将b投影到A的列空间上两次,得到的结果依然是p,因此有
证明:
P2=P×P=A(ATA)−1ATA(ATA)−1AT=A(ATA)−1AT=P
那么投影矩阵有什么用呢?举例来说,它应该能产生出一个投影,如果让P和b相乘,此时在极端情况下,如果b位于列空间中时,那么有Pb=b;如果b垂直于列空间,那么有Pb=0,此时的b就在左零空间中。一般情况下会有一个分量在列空间里,另一个分量在左零空间中。
因此,一个向量b总有两个分量,一个分量在A的列空间中(也就是p),另一个分量垂直于A的列空间(位于左零空间,也就是e)。而投影矩阵的作用就是保留列空间中的那个分量,拿掉垂直于列空间的分量。
由此我们可以分别表示出p和e:
p=Pb
e=b−p=b−Pb=(I−P)b
这里(I-P)也可以看作是一个投影矩阵,作用于b向量,投影到左零空间中。e被表示出来后,我们就可以控制误差了。
最小二乘法
有了上述知识的铺垫接下来就可以进入最小二乘法了。其实最小二乘法就是一种投影,最后就是保证误差最小,使用最小二乘法其实就是为了解决Ax=b无解的情况。
我们从一个案例开始:
例. 求解:三个点(1,1),(2,2),(3,2)拟合的直线方程
我们设最优直线方程为:b=C+Dt,带入三个点得:C+D=1、C+2D=2、C+3D=2
写成矩阵形式为:
⎣⎡111123⎦⎤[CD]=⎣⎡122⎦⎤
其中,
A=⎣⎡111123⎦⎤,x^=[C^D^],b=⎣⎡122⎦⎤
列出矩阵方程后会发现Ax=b无解,为了求近似的x^,由于Ax=b可能无解,那么只能求解最接近的那个可解问题,因为Ax总是在列空间里,而b不一定在,所以我们要把b变为列空间中最为接近的向量,这样就把问题转化为了Ax^=p,误差就是投影距离e=b−p。就有
ATb=ATAx^
求解:
ATA=[111213]⎣⎡111123⎦⎤=[36614]
ATb=[111213]⎣⎡122⎦⎤=[511]
解得:
x^=[3221]
固拟合直线为:y=C^+D^x=32+21x
我们也可以通过求偏导,求极值,从导数的角度来求得拟合直线,可以先表示出误差∣Ax−b∣,为了便于计算,我们去求它们的平方和:
∣e∣2=∣Ax−b∣2
那么总误差E=e12+e22+e32,求E的最小值Emin即可。
求出C^和D^后三个点各自的误差也可以求得,只需带入三个点的坐标即可得到三个p,通过e=b−p,最终我们得到了:
b=⎣⎡122⎦⎤,p=⎣⎡67610613⎦⎤,e=⎣⎡−6162−61⎦⎤
我们就得到了如下性质:
- 误差向量e与投影向量p垂直;
- 误差向量e还垂直于列空间中的每一个向量。
最后需要注意,最小二乘法存在一定的局限性,那就是最小二乘法很容易受到离群量的影响。如果数据中有误差过大的点,那么它会对整个结果带来巨大的影响。