拟合直线的五层境界

第一层 两点定一线

给出两个点的坐标(x_1,y_1)(x_2,y_2),求通过这两点的直线.

line1.png

把直线方程和两个点的坐标代入后,可以得到一个方程组:

\begin{cases} ax+by+c=0 \\ ax_1+by_1+c=0 \\ ax_2+by_2+c=0 \\ \end{cases}

把 a,b,c 看作未知数,齐次方程组有非平凡解的条件是行列式等于 0:

\begin{vmatrix} x & y & 1\\ x_1 & y_1 & 1\\ x_2 & y_2 & 1\\ \end{vmatrix}=0

可得直线方程为:x(y_1-y_2) + y(x_2-x_1) + x_1y_2 - x_2y_1 = 0.

第二层 多点拟合

有多个数据点时,拟合一条直线。记 n 个点的坐标为(x_i,y_i)i=1,..,n.

line2.png

设直线方程为y=ax+b,最小化\sum{[y_i-(ax_i+b)]^2},列出矩阵方程:

\begin{bmatrix} x_1 & 1 \\ x_2 & 1 \\ | & | & \\ x_n & 1 \\ \end{bmatrix} \begin{bmatrix} a \\ b \end{bmatrix}=\begin{bmatrix} y_1 \\ y_2 \\ | \\ y_n \end{bmatrix}

应用最小二乘法可得:

\begin{bmatrix} \sum{x_i^2} & \sum{x_i} \\ \sum{x_i} & n \\ \end{bmatrix} \begin{bmatrix} a \\ b \end{bmatrix}=\begin{bmatrix} \sum{x_iy_i} \\ \sum{y_i} \end{bmatrix}

解出:

\begin{cases} a=\frac{n\sum{x_iy_i}-\sum{x_i}\sum{y_i}}{n\sum{x_i^2}-(\sum{x_i})^2}=\frac{\sum{x_iy_i}-n\overline{x}\overline{y}}{\sum{x_i^2}-n\overline{x}^2}=\frac{∑x_iy_i-∑x_i\overline{y}-∑\overline{x}y_i+∑\overline{x}\overline{y}}{∑x_i^2-2∑x_i\overline{x}+∑\overline{x}^2}=\frac{∑(x_i-\overline{x})(y_i-\overline{y})}{∑(x_i-\overline{x})^2} \\ \\ b=\frac{\sum{x_i^2}\sum{y_i}-\sum{x_i}\sum{x_iy_i}}{n\sum{x_i^2}-(\sum{x_i})^2}=\frac{\overline{y}\sum{x_i^2}-\overline{x}\sum{x_iy_i}}{\sum{x_i^2}-n\overline{x}^2}=\frac{\overline{y}(\sum{x_i^2}-n\overline{x}^2)-\overline{x}(\sum{x_iy_i}-n\overline{x}\overline{y})}{\sum{x_i^2}-n\overline{x}^2}=\overline{y}-a\overline{x} \\ \end{cases}

其中\overline{x}=\frac{1}{n}\sum{x_i}\overline{y}=\frac{1}{n}\sum{y_i}为 x 和 y 坐标的平均值.

最小二乘法的缺陷是最小化的是点到直线的竖直距离的平方和,且不能拟合竖直的直线.

第三层 多点最优拟合

最优拟合是最小化点到直线的垂直距离的平方和.

line3.png

设直线方向为单位向量,法向为单位向量,取直线上的一个点(x_o,y_o)为坐标原点,得到平移后的坐标值:
_i=(x_i-x_o,y_i-y_o)

_i到直线的距离为^T_i_i投影到直线上的长度为^T_i,因为⊥,有

\sum{‖_i‖^2}=\sum{[(^T_i)^2+(^T_i)^2]}=\sum{^T_i_i^T}+\sum{^T_i_i^T}=^T\sum{_i_i^T}+^T\sum{_i_i^T}

S=\sum{_i_i^T}

\sum{‖_i‖^2}=^TS+^TS

^TS为点到直线的垂直距离的平方和,^TS为点到直线投影长度的平方和.

\sum{‖_i‖^2}是一个固定的数值,所以目标是选取合适的,使^TS最小且^TS最大.

S 为二阶对称的正定矩阵,有一大一小两个正的本征值λ_{max}\geqslantλ_{min},对应两个正交的本征向量_{max},_{min}.

对于任意的向量 有:

^TS=^T(λ_{max}_{max}^T_{max}+λ_{min}_{min}^T_{min})=λ_{max}(_{max}^T)^2+λ_{min}(_{min}^T)^2

因为λ_{min}[(_{max}^T)^2+(_{min}^T)^2]\leqslantλ_{max}(_{max}^T)^2+λ_{min}(_{min}^T)^2\leqslantλ_{max}[(_{max}^T)^2+(_{min}^T)^2]
所以λ_{min}‖‖^2\leqslant^TS\leqslantλ_{max}‖‖^2,且仅当 与本征向量重合时取等号.

所以当为较小的本征值对应的本征向量时,^TS最小且^TS=λ_{min},同时为较大的本征值对应的本征向量,^TS最大且^TS=λ_{max}.

这种方法叫做主成分分析法,如果取S=\dfrac{\sum{_i_i^T}}{n-1}为协方差矩阵,那么λ_{min}为点到直线垂直距离的均方差.

如果已知直线确切地通过某个点,则可以把这个点作为坐标原点;否则由于

\sum{‖_i‖^2}=\sum{(x_i-x_o)^2}+\sum{(y_i-y_o)^2}=(nx_o^2-2x_o\sum{x_i}+\sum{x_i^2})+(ny_o^2-2y_o\sum{y_i}+\sum{y_i^2})

可见,当x_o=\frac{1}{n}\sum{x_i}y_o=\frac{1}{n}\sum{y_i}时,\sum{‖_i‖^2}的值最小,也就是说可以把坐标原点放到 n 个坐标点的中心点上。

S=\dfrac{\sum{_i_i^T}}{n-1}=\frac{1}{n-1}\begin{bmatrix} \sum{(x_i-x_o)^2} & \sum{(x_i-x_o)(y_i-y_o)} \\ \sum{(x_i-x_o)(y_i-y_o)} & \sum{(y_i-y_o)^2} \\ \end{bmatrix}=\begin{bmatrix} S_{xx} & S_{xy} \\ S_{xy} & S_{yy} \\ \end{bmatrix}
λ_{min}=\cfrac{1}{2} ( S_{xx} + S_{yy} - \sqrt{(S_{xx}-S_{yy})^2 + 4 S_{xy}^2}), _{min}=(S_{xx} - S_{yy} - \sqrt{(S_{xx}-S_{yy})^2 + 4 S_{xy}^2}, 2S_{xy})=(n_x,n_y).
直线方程为:n_xx + n_yy - n_xx_o - n_yy_o = 0.

第四层 加权拟合

每个点除了有坐标值(x_i,y_i),还有权重w_i. 下图中点的颜色越深,权重越大.

line4.png

x_o=\cfrac{\sum{w_ix_i}}{\sum{w_i}}y_o=\cfrac{\sum{w_iy_i}}{\sum{w_i}}.

S=\dfrac{\sum{w_i_i_i^T}}{n-1}=\frac{1}{n-1}\begin{bmatrix} \sum{w_i(x_i-x_o)^2} & \sum{w_i(x_i-x_o)(y_i-y_o)} \\ \sum{w_i(x_i-x_o)(y_i-y_o)} & \sum{w_i(y_i-y_o)^2} \\ \end{bmatrix}=\begin{bmatrix} S_{xx} & S_{xy} \\ S_{xy} & S_{yy} \\ \end{bmatrix}
其余计算方法同上。

第五层 排除异常数据的干扰

数据在测量过程可能会受到干扰,或者录入错误等,下图左边是正常的拟合,右边是排除外点的拟合.

line5.png

有两种思路:

1、随机抽样一致算法:随机选取 k 个点进行拟合,剩余的点到直线距离平方大于方差的记作外点(outliers),重复 N 次,返回外点个数最小的一组数据点所拟合的直线.

2、加权迭代算法:先设初始权重都为 1,拟合一条直线,取每个点到直线的距离d_i,当d_i小于平均距离时取距离的平均值,然后把d_i的倒数作为权重再次拟合,迭代进行,直到最近两次拟合的方差没有明显改善时停止.

你可能感兴趣的:(拟合直线的五层境界)