原文文献PDF地址
这篇报告的目的是开发最小二乘法拟合各种不同几何元素的最优化算法。利用matlab代码对各种几何形状进行了复现并且测试了自co-ordinate measuring machines下获得的真实数据点。以下是已经被研究了的各种几何图形:
这篇报告的书写方式对于有着线性代数和曲线拟合基础的人来说比较容易理解。作者提到的各种论文的简要摘要见附录1和2,建议在开始阅读报告前先浏览附录。在这篇报告中只建立了在笛卡尔坐标系下数据点的最小二乘法最佳拟合参考元素。
最小二乘法准则可以广泛的应用于曲线拟合问题,最小二乘法最佳拟合元素就是解决将数据拟合到一个平面的问题。
这是一个参数化的问题。最佳平面由平面上一点C ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)以及与平面垂直的方向余弦(a,b,c)决定。平面上所有的点(x,y,z)都满足 a ( x − x 0 ) + b ( y − y 0 ) + c ( z − z 0 ) = 0 a(x- x_0)+b(y- y_0)+c(z- z_0) = 0 a(x−x0)+b(y−y0)+c(z−z0)=0。
任意一点A ( x i , y i , z i ) (x_i,y_i,z_i) (xi,yi,zi)到指定平面的距离为 d i = a ( x i − x 0 ) + b ( y i − y 0 ) + c ( z i − z 0 ) d_i=a(x_i-x_0)+b(y_i-y_0)+c(z_i-z_0) di=a(xi−x0)+b(yi−y0)+c(zi−z0)。所有点到平面的距离的平方和是 F = ∑ i = 1 n d i 2 F=\sum_{i=1}^n d_i^2 F=∑i=1ndi2 ,因此我们的问题是找到元素 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)以及(a,b,c)使得F的值最小。
设置一个函数 E ( u ) = ∑ i = 1 n d i 2 ( u ) E(u)=\sum_{i=1}^nd_i^2(u) E(u)=∑i=1ndi2(u)使得他的最小化与参数 u = ( u 1 . . . u n ) T u=(u_1...u_n)^T u=(u1...un)T相关。在这里 d i d_i di表示数据点到几何元素由u参数化的距离。
为了理解下面描述在标准教科书中使用的最小二乘法拟合直线的传统方法。问题的矩阵公式也会被详细地解释,因为它对于解决大问题时非常有用。考虑通过一组数据点 ( x i , y i ) (x_i,y_i) (xi,yi)(i从1->n)去拟合一条直线y=a+bx,最小化函数使得点到直线垂直方向测量的距离的平方和最小。因此F就是最小化函数。
F = ∑ i = 1 n ( y i − a − b x i ) 2 F=\sum_{i=1}^n(y_i-a-bx_i)^2 F=i=1∑n(yi−a−bxi)2
f是最小值的一个条件是
∂ f ∂ a = 0 , ∂ f ∂ b = 0 \frac {\partial f}{\partial a}=0,\frac{\partial f}{\partial b}=0 ∂a∂f=0,∂b∂f=0
因此对上述函数中的a和b的部分求偏导可得
2 ( − 1 ) ∑ i = 1 n ( y i − a − b x i ) = 0 2(-1)\sum_{i=1}^n(y_i-a-bx_i)=0 2(−1)i=1∑n(yi−a−bxi)=0
2 ( − x i ) ∑ i = 1 n ( y i − a − b x i ) = 0 2(-x_i)\sum_{i=1}^n(y_i-a-bx_i)=0 2(−xi)i=1∑n(yi−a−bxi)=0
这些可以被简化为
∑ i = 1 n y i = n a + b ∑ i = 1 n x i \sum_{i=1}^n y_i=na+b\sum_{i=1}^nx_i i=1∑nyi=na+bi=1∑nxi
∑ i = 1 n x i y i = a ∑ i = 1 n x i − b ∑ i = 1 n x i 2 \sum_{i=1}^n x_i y_i=a\sum_{i=1}^nx_i-b\sum_{i=1}^nx_i^2 i=1∑nxiyi=ai=1∑nxi−bi=1∑nxi2
对上述方程式一同求解就可以得到a和b的值。
考虑通过一组数据点 ( x i , y i ) (x_i,y_i) (xi,yi)(i:1->n)去拟合一条直线y=a+bx,如果数据点共线,这条线将通过n个点,所以
y 1 = a + b x 1 y_1=a+bx_1 y1=a+bx1
y 2 = a + b x 2 y_2=a+bx_2 y2=a+bx2
y 3 = a + b x 3 y_3=a+bx_3 y3=a+bx3
…
y n = a + b x n y_n=a+bx_n yn=a+bxn
它可以被写为矩阵形式
[ y 1 y 2 ⋮ y n ] = [ 1 x 1 2 x 2 ⋮ ⋮ n x n ] [ a b ] \begin{bmatrix} y_1\\ y_2\\ \vdots\\ y_n\\ \end{bmatrix}=\begin{bmatrix} 1&x_1\\ 2&x_2\\ \vdots&\vdots\\ n&x_n\\ \end{bmatrix}\begin{bmatrix} a\\ b\\ \end{bmatrix} ⎣ ⎡y1y2⋮yn⎦ ⎤=⎣ ⎡12⋮nx1x2⋮xn⎦ ⎤[ab]
让 B = [ y 1 y 2 ⋮ y n ] , A = [ 1 x 1 2 x 2 ⋮ ⋮ n x n ] , p = [ a b ] B=\begin{bmatrix} y_1\\ y_2\\ \vdots\\ y_n\\ \end{bmatrix},A=\begin{bmatrix} 1&x_1\\ 2&x_2\\ \vdots&\vdots\\ n&x_n\\ \end{bmatrix},p=\begin{bmatrix} a\\ b\\ \end{bmatrix} B=⎣ ⎡y1y2⋮yn⎦ ⎤,A=⎣ ⎡12⋮nx1x2⋮xn⎦ ⎤,p=[ab]
那么上式就可以被表示为B=AP,
目标就是找到一个向量p可以使得不同的 ∥ B − A P ∥ \Vert B-AP \Vert ∥B−AP∥的欧式距离最小。
如果 P = P ∗ = [ a ∗ b ∗ ] P=P*=\begin{bmatrix} a*\\ b*\\ \end{bmatrix} P=P∗=[a∗b∗]是最小化向量,
那么y=a*+b* x就是最小二乘法拟合直线,这个也可以被解释为
∥ B − A P ∥ 2 = ( y 1 − a − b x 1 ) 2 + ( y 2 − a − b x 2 ) 2 + . . . + ( y n − a − b x n ) 2 \Vert B-AP \Vert^2 =(y_1-a-bx_1)^2 +(y_2-a-bx_2)^2 +...+(y_n-a-bx_n)^2 ∥B−AP∥2=(y1−a−bx1)2+(y2−a−bx2)2+...+(yn−a−bxn)2
如果令 d 1 = ( y 1 − a − b x 1 ) 2 , d 2 = ( y 2 − a − b x 2 ) 2 , . . . , d n = ( y n − a − b x n ) 2 d_1=(y_1-a-bx_1)^2 ,d_2=(y_2-a-bx_2)^2,... ,d_n=(y_n-a-bx_n)^2 d1=(y1−a−bx1)2,d2=(y2−a−bx2)2,...,dn=(yn−a−bxn)2
d可以看作是数据集中每一个点到拟合直线的距离,所以
∥ B − A P ∥ 2 = d 1 2 + d 2 2 + . . . + d n 2 \Vert B-AP \Vert^2=d_1^2+d_2^2+...+d_n^2 ∥B−AP∥2=d12+d22+...+dn2
为了使 ∥ B − A P ∥ \Vert B-AP \Vert ∥B−AP∥最小,AP上就必须与B在列空间A的正交投影AP相等,这表明了B-AP必须与列空间A垂直。
所以对于在R2上的每个向量P有
(B-AP*)AP=0
这个也可以被写作
(AP)T(B-AP*)=0
PTAT(B-AP*)=0
PT(ATB-ATAP*)=0
(ATB-ATAP*)P=0
所以ATB-ATAP垂直于R2上的每个向量P,这表明
ATB-ATAP=0
ATAP=ATB
这表明了P*满足线性系统
ATAP=ATB
这个方程式也被称为正规方程,该方程的解为
P=(ATA)-1ATB
这个等式可以被用在求多项式的最小二乘法拟合的情况
牛顿法是最强大和著名数值方法之一,用作当f(x)是非线性函数求解f(x)=0的根。这个技术被应用于圆、球、圆柱、圆锥的线性最小二值模型。为了诱导这个算法的工作原理,首先讲述牛顿法。
假设给定一个函数f它的定义域是[a,b],让 x ‾ ∈ [ a , b ] \overline {x}\in[a,b] x∈[a,b],这样 f ′ ( x ‾ ) ≠ 0 f'(\overline {x})≠0 f′(x)=0,f(x)的 x ‾ \overline {x} x的泰勒多项展开式就是
f ( x ) = f ( x ‾ ) + ( x − x ‾ ) f ′ ( x ‾ ) + ( x − x ‾ ) 2 2 f ′ ( ξ ( x ) ) , ξ ( x ) ∈ [ x , x ‾ ] f(x)=f(\overline {x})+(x-\overline {x})f'(\overline {x})+\frac {(x-\overline {x})^2}{2}f'(\xi(x)),\xi(x)\in[x,\overline {x}] f(x)=f(x)+(x−x)f′(x)+2(x−x)2f′(ξ(x)),ξ(x)∈[x,x]
因为f(q)=0当q=x时,
0 = f ( x ‾ ) + ( x − x ‾ ) f ′ ( x ‾ ) + ( x − x ‾ ) 2 2 f ′ ( ξ ( x ) ) 0=f(\overline {x})+(x-\overline {x})f'(\overline {x})+\frac {(x-\overline {x})^2}{2}f'(\xi(x)) 0=f(x)+(x−x)f′(x)+2(x−x)2f′(ξ(x))
牛顿法假设 ∣ q − x ‾ ∣ |q-\overline {x}| ∣q−x∣很小,那么 ∣ p − x ‾ ∣ 2 |p-\overline {x}|^2 ∣p−x∣2就更小,因此
0 = f ( x ‾ ) + ( q − x ‾ ) f ′ ( x ‾ ) 0=f(\overline {x})+(q-\overline {x})f'(\overline {x}) 0=f(x)+(q−x)f′(x)
( q − x ‾ ) = − f ( x ‾ ) f ′ ( x ) (q-\overline {x})=-\frac{f(\overline {x})}{f'(x)} (q−x)=−f′(x)f(x)
让 q = u 1 , x ‾ = u 0 , p = − f ( x ‾ ) f ′ ( x ) q=u_1,\overline {x}=u_0,p=-\frac{f(\overline {x})}{f'(x)} q=u1,x=u0,p=−f′(x)f(x)
因此 u 1 = u 0 + p , p = − f ( u 0 ) f ′ ( u 0 ) u_1=u_0+p,p=-\frac{f(u_0)}{f'(u_0)} u1=u0+p,p=−f′(u0)f(u0)
在线性最小二乘问题中,下式用来确定几何元素与一组数据点拟合程度有多好
E = ∑ i = 1 n d i 2 E=\sum_{i=1}^n d_i^2 E=i=1∑ndi2
其中di是点到几何元素的距离
在这种情况下,di不是线性函数;高斯牛顿法被用来寻找平方和E的最小值。假设这里有一个初始值u*,利用这种方式求解一个线性最小二乘系统
J p = − d J_p=-d Jp=−d
J是一个m*n的雅可比矩阵其中第ith行是di相对于参数u的梯度
J i j = ∂ d i ∂ u j J_{ij}=\frac {\partial d_i}{\partial u_j} Jij=∂uj∂di
它对u进行了评估,d的第ith个分量是di(u),该参数将被更新为
u : = u + p u:=u+p u:=u+p
最佳拟合直线通过数据点的质心 ( x ‾ , y ‾ , z ‾ ) (\overline {x},\overline {y},\overline {z}) (x,y,z)这样就确定了直线L上的一个点,现在需要找出直线的方向向量。
用来求解最佳拟合圆的算法是高斯牛顿法,上面已经解释过了。首先是要找到初始的估计值,其次去实现高斯牛顿算法。用线性最小二乘模型求解圆的圆心和半径的初始预估值,执行步骤如下:
一旦获得初始预估值就可以形成右手向量d和雅可比矩阵J,然后就可以解出线性最小二乘系统
J [ p x 0 p y 0 p r ] = − d J\begin{bmatrix} p_{x0}\\ p_{y0}\\ p_r\\ \end{bmatrix}=-d J⎣ ⎡px0py0pr⎦ ⎤=−d
这些参数的值会随着估计值更新
x 0 = x 0 + p x 0 x_0=x_0+p_{x0} x0=x0+px0
y 0 = y 0 + p y 0 y_0=y_0+p_{y0} y0=y0+py0
r = r + p r r=r+p_r r=r+pr
重复以上步骤直到算法收敛
由于篇幅较长发布不了故而分为两篇进行上传
Least Squares Fitting最小二乘法拟合(2)