引言
最小二乘法是经典的参数稳健估计方法。核心思想是使得估计出的模型与实际数据之间误差的平方和最小(趋于0)。直线参数的估计又是最常用的曲线参数估计,稳健估计方法有很多:RANSAC、BaySAC、极大似然法等,这篇博文主要讲解如何使用最小二乘法估计直线参数。
一群离散观测点,及其最小二乘估计直线方程
直线方程最优拟合
直线方程的形式比较多,粗略统计有10种之多,如:一般式、点斜式、截距式、斜截式
⋯
。本博文采用直线斜截式,最小二乘拟合其方程系数。
斜截式:
y=kx+b
,适用于不垂直于
x
轴的直线。
- 斜率为
k -
y
轴截距为
b 根据最小二乘原理,误差平方和最小,得误差函数: f=∑ni=1(yi−k∗xi−b))2=0 。高数中极值定理可知,误差方程一阶导数等于0处取得极值,因此分别对其关于 k 和
b 求导,解 k,b 值使得误差函数取最小值。但是直线斜截式无法表示垂直 x 轴的直线,如:x=3 。⎧⎩⎨⎪⎪∂f∂k=∑ni=1[(yi−kxi−b)xi]=0∂f∂b=∑ni=1(yi−kxi−b)=0{∑ni=1(xiyi)−k∑ni=1(x2i)−b∑ni=1(xi)=0∑ni=1(yi)−k∑ni=1(xi)−nb=0令, A=∑ni=1(x2i) , B=∑ni=1(xi) , C=∑ni=1(xiyi) , A=∑ni=1(yi) ,得
{Ak+bB=CBk+nb=D{k=Cn−BDAn−BBb=AD−CBAn−BB上面过程繁琐,只适用于直线的最小二乘解。下面将直线斜截式拓展导任意曲线,任意曲线方程 p(x)=p1xn+p2xn−1+⋯+pnx+pn+1 。可以看到直线斜截式即, n=1 时的曲线方程。将曲线方程,写成矩阵乘积的形式:
⎛⎝⎜⎜⎜⎜x1x2⋮xn11⋮1⎞⎠⎟⎟⎟⎟⎛⎝⎜⎜⎜⎜p1p2⋮pn⎞⎠⎟⎟⎟⎟=⎛⎝⎜⎜⎜⎜y1y2⋮yn⎞⎠⎟⎟⎟⎟
上面乘积形式,即 AX=B , X=(ATA)−1ATB ,解出的 X 就是最小二乘解。总结
斜截式虽然并不能表示竖直直线,但是实际应用中也基本不太可能遇到完全竖直直线,竖直的直线也可以用尽量大的系数
a 表示。上面列出了两种直线系数低最小二乘计算方法,具体使用哪一种可以根据使用环境确定。若模型单一,只有二维直线时候,建议使用第一种具有计算速度快的优点。参考
[1]http://cn.mathworks.com/help/matlab/ref/polyfit.html?searchHighlight=polyfit&s_tid=doc_srchtitle
[2]https://www.varsitytutors.com/hotmath/hotmath_help/topics/line-of-best-fit
-
y
轴截距为