最小二乘法的几何解释
这篇文章用通俗易懂的语言,从几何的角度解释了最小二乘法的解为什么是
x^=(ATA)−1ATb
线性方程组的几何意义
为了从几何的角度解释最小二乘法,我们先回顾一下,线性方程组的几何意义。线性方程组可以从行和列两个角度看。
举例,看如下简单的线性方程组:
{x1+x2=3←a−x1+x2=1←b
从行的角度看
线性方程组的解就是直线
a
和直线
b
的交点,这一点应该谁都知道,如下图所示:
从图上很容易可以看出该线性方程组的解为
x1=1,x2=2
,
所以从行的角度看,线性方程组的每一行都代表空间中的几何图形(二维时是直线,三维时是平面,高维时是高维空间中的一个”平面“),线性方程组的解就是这些图形的交点or交线or交面。
从列的角度看
从列的角度看时,先把上面的线性方程组写成矩阵的形式
[ 1 1−1 1]×[x1x2]=[31]↑↑↑a1a2b
这样看还不是很直观,再把上式拆开,写成下面这个样子:
[1−1]×x1+[11]×x2=[31]↑↑↑a1×x1+a2×x2=b
怎么拆的?矩阵乘法好像不是这个样子的!放心吧,矩阵乘法就是这个样子的,只是这种写法在大学里的代几课上不常见,但矩阵乘法的意义就是这个样子的。表示
向量
a1
的
x1
倍加上向量
a2
的
x2
倍等于向量
b
。这种角度就是从列向量的角度看线性方程组。该方程的解已经从行的角度看出来了,为
x1=1,x2=2
,于是我们把向量
a1,a2,b
画到下面这张图上:
很神奇对不对,向量
a1
的1倍加上向量
a2
的2倍刚好等于向量
b
,而倍数1和2,就是我们的解
x1
和
x2
。
从列的角度看线性方程组
Ax=b
的解,就是为系数矩阵
A
里的每一列都寻找一个合适的倍数,使每一列乘上这个倍数后再相加刚好等于向量
b
,这个倍数就是解。官方语言就是找到
A
里的列向量的一个线性组合使之等于
b
。
最小二乘法
最小二乘法就是解一个无解的线性方程组
我们从一个最简单的例子开始,已知平面上有3个点(1,2),(0,2),(2,3)
我们想用一条直线去拟合它。像高中时一样,设这条直线的方程为
y=kx+b
。我们希望这条直线可以同时通过这三个点,也就是这条直线的参数要满足:
⎧⎩⎨⎪⎪1×k+b=20×k+b=22×k+b=3
从图中直观的看,没有一条直线可以同时过这三个点,所以这个方程是无解的。
怎么解一个无解的方程组呢?下面好戏开始了。为了表述方便,我们换一下符号,用
x1
表示
k
,用
x2
表示
b
。即:
⎧⎩⎨⎪⎪1×x1+x2=20×x1+x2=22×x1+x2=3
写成矩阵形式:
⎡⎣⎢110121⎤⎦⎥[x1x2]=⎡⎣⎢223⎤⎦⎥↑↑↑A×x=b
从列的角度看:
⎡⎣⎢102⎤⎦⎥×x1+⎡⎣⎢111⎤⎦⎥×x2=⎡⎣⎢223⎤⎦⎥↑↑↑a1×x1+a2×x2=b
一但化成列的形式,我们就很自然想到把向量
a1,a2,b
画到图上:
要找到解,就要找到
a1,a2
的一个线性组合,使得组合后的向量刚好等于
b
。可惜的是
任何的
a1
和
a2
线性组合,只可能出现在
a1,a2
所在的平面
S
上(这个平面
S
就是传说中的向量空间),但是向量
b
不在平面
S
上,如下图。不可能找到解,怎么办呢?
无解 —>解出一个最接近的解
找不到完美的解,就只能找到一个最接近的解。所以我们想在平面
S
上找一个最接近向量
b
的向量来代替向量
b
,记这个替代品向量为
P
。就是过向量
b
的终点做平面
S
的垂线(也就是做投影),垂足就是代替向量
P
的终点。
P
与
b
之间的误差
e=b−P
。
原来的方程为
Ax=b
是无解的,我们用
P
代替
b
后,
P
在
a1a2
所在的平面上,所以现在方程
Ax^=P
就一定是有解的啦。
我们知道,
P
与
b
之间的误差为:
e=b−P=b−Ax^(1)
要想使
P
与
b
之间的差距最小,那么
e
一定是垂直于平面
S
的,也就是要垂直于
a1
和
a2
。想一想在高中时是怎么表示两个向量垂直的?只要他们的点乘等于0就行了。也就是
e∙a1=0,e∙a2=0
,用矩阵表示出来就是
a1Te=0,a2Te=0
。即:
ATe=0(2)
把(1)带入(2)中,结果出来了,
AT(b−Ax^)=0
,化简一下就是
ATAx^=ATb
,这么简单就推出来了!所以最佳的近似解就是
x^=(ATA)−1ATb
。
这里你是否担心
ATA
不可逆?不会的,只要
A
的每一列是线性无关的,那么
ATA
就是一个可逆的对称的方阵。这样,按公式解出的解出了最近似的解为(1/2,11/6)。
从列的角度,我们就可以用
a1
和
a2
的线性组合来表示
P
,下图所示。
那么最优的直线的斜率和截距就是我们解出的k=1/2,b=11/6=1.8333。如下图。
上图既不是行的角度,也不是列的角度,它只是问题的来源,那如果从行的角度看原方程,是什么样子的,方程的每一行都是一条直线,三条直线不相交于一点,我们的解是下图中的圆点,是中间三角形的重心?质心?不知道呀,看起来有点像。
结束语
这里只是举了一个简单的不能再简单的例子来说明做小二乘法的原理。它简单到可以画出列向量的图,对于更高维的向量,列向量的图就画不出来了,但它任然存在于一个高维的空间里。公式
x^=(ATA)−1ATb
任然适用。但从列向量的角度看矩阵真的是会有很多收获的。