最小二乘法直线拟合:y= kx+b 及其缺点分析

二维直线常用斜截式方程 \(y=kx+b\)表达。
已知离散点 $$ \{(x_1,y_1),(x_2,y_2),…,(x_n,y_n)\} $$ 欲求一条直线\(y=kx+b\),使得$$ {f=\sum_{i=1}^n (kx_i+b-y_i)^2}$$取得最小值。
\(k\),\( b\)为未知数 ,根据最小二乘解法,令 \( f\) 对\( k\),\( b\) 偏导数分别为0,求解出来的\( k\),\(b\)即所求直线参数$$ \frac {\partial f}{\partial k} = \sum_{i=1}^n 2x_i(kx_i+b-y_i)=0 $$
$$ \frac {\partial f}{\partial b} = \sum_{i=1}^n 2(kx_i+b-y_i)=0$$

化简后得到

$$ \sum x^2k + \sum xb=\sum xy $$
$$ \sum xk + nb = \sum y$$

或者写成矩阵形式更好
$$ {\left[\begin{array}{cc}
\sum x^2 & \sum x\\
\sum x &n
\end{array}
\right ]}{\left[\begin{array}{cc}k\\b\end{array}\right ]} = {\left[\begin{array}{cc} \sum xy\\ \sum y\end{array}\right ]}$$
此时可用采用克拉默法则求解。
$$  k=\frac {n\sum xy – \sum x\sum y}{n\sum x^2 – (\sum x)^2}$$
$$  b=\frac {n\sum x^2 \sum y – \sum x\sum xy}{n\sum x^2 – (\sum x)^2}$$
我推荐参考Eigen 对线性方程的求解。
在实践中,有同学采用上述思路完成了编码,测试时却发现“某些”情况下,算法似乎取的结果存在问题。问题存在与那一块呢?
其实就在与 \( y=kx+b\)方程式上。如果待求的直线为一条垂直与x轴的直线,\( y=kx+b\)是无法表示的,因而在数值上存在问题,表现就是k的值求不准。结合上面的求解方程,就是等号左边的\(2\times2 \)矩阵奇异或者接近奇异。
很显然,在特定的应用场景下,比如几何算法中,斜截式方程存在缺陷,不能表达所有情况。有没有更好的解决方案?
那就是 $$ Ax+By+C=0$$涵盖了所有情况。具体解法我会在下一篇博文给出。敬请关注。

 

发表评论

电子邮件地址不会被公开。