最小二乘法的几何解释
2015-09-12 15:08
288 查看
最小二乘法的几何解释
这篇文章用通俗易懂的语言,从几何的角度解释了最小二乘法的解为什么是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任然适用。但从列向量的角度看矩阵真的是会有很多收获的。相关文章推荐
- 动易2006序列号破解算法公布
- 用批处理解决数学问题的代码第1/4页
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析