圓擬合算法
最小二乘法擬合(least square fitting)
使用最小二乘法,對幾何特徵進行擬合,主要有兩大類方式:代數擬合和幾何擬合,這兩種方式的區別,在於它們對誤差距離的定義方式。
代數距離 :爲要進行擬合的幾何特徵(直線、圓、橢圓等)寫下隱式方程,然後將點的座標帶入此隱式方程就得到了點到該幾何特徵的距離。這種方法對於直線擬合、圓擬合,返回的就是到其的真實距離。而對於橢圓擬合,它返回的值是與距離有類似的屬性,但不是一個真正的距離值。因此這個距離被稱爲 代數距離 。
代數擬合 (algebraic fitting)
代數擬合 的幾何特徵 是通過帶有參數向量a ⃗ = ( a 1 , ⋯ , a q ) \vec a = (a_1, \cdots, a_q) a = ( a 1 , ⋯ , a q ) 的隱式方程 F ( X , a ) = 0 F(X, a) = 0 F ( X , a ) = 0 來表示的。其誤差距離 是由隱式方程與每個給定點的期望值(即零)的偏差定義。但方程的不確定性導致給出的點會出現不位於圖形上的現象(即存在一些擬合誤差)。
關於圓的最小二乘法擬合,大多數論文給出的其代數距離平方和及其修正公式,如下所示:
∑ i = 1 m e i 2 = ∑ i = 1 m [ ( x i − x c ) 2 + ( y i − y c ) 2 − r 2 ] 2 (1) \sum_{i=1}^m e_i^2 = \sum_{i=1}^m[(x_i - x_c)^2 + (y_i - y_c)^2 - r^2]^2 \tag{1} i = 1 ∑ m e i 2 = i = 1 ∑ m [ ( x i − x c ) 2 + ( y i − y c ) 2 − r 2 ] 2 ( 1 )
儘管代數擬合在實現和計算成本方面具有優勢,但在精度方面以及與擬合參數和誤差的物理解釋相關方面都存在缺陷。其中,已知的代數擬合的缺點,有以下幾點:
誤差距離的定義與測量準則不符;
擬合參數的可靠性,難以檢驗;
擬合參數對座標變換來說是可變的(如,橢圓擬合過程中,對給定點進行一個簡單的平移變換,不僅會造成中心點的座標發生變化,而且還會造成橢圓軸的長度及角度的變化);
預估的擬合參數存在偏差;
擬合誤差存在不合理的加權;
擬合過程有時會以意外的幾何特徵結束(如,可能會以雙曲線代替橢圓的擬合);
Kåsa Fit
注:網絡上查到的大多數最小二乘法求擬合圓的算法,均是該算法的實現。
以下是 Kåsa Fit 的求解過程:
首先,根據圓的公式( x − A ) 2 + ( y − B ) 2 = R 2 (x-A)^2 + (y-B)^2 = R^2 ( x − A ) 2 + ( y − B ) 2 = R 2 可得,
R 2 = x 2 − 2 A x + A 2 + y 2 − 2 B y + B 2 ;
R^2 = x^2 - 2Ax + A^2 + y^2 - 2By + B^2;
R 2 = x 2 − 2 A x + A 2 + y 2 − 2 B y + B 2 ;
令:
a = − 2 A , b = − 2 B , c = A 2 + B 2 − R 2 a = -2A, b = -2B, c = A^2 + B^2 - R^2 a = − 2 A , b = − 2 B , c = A 2 + B 2 − R 2
可得圓的方程的另一種形式:
x 2 + y 2 + a x + b y + c = 0 (1) x^2 + y^2 + ax + by + c = 0 \tag{1} x 2 + y 2 + a x + b y + c = 0 ( 1 )
根據公式( 1 ) (1) ( 1 ) ,只要求出參數 a, b, c 即可得到圓心及半徑的參數;
A = − a 2 , B = − b 2 , R = a 2 + b 2 − 4 c 2
A = -\frac {a}{2}, B = -\frac{b}{2},R = \frac{\sqrt{a^2 + b^2 - 4c}}{2}
A = − 2 a , B = − 2 b , R = 2 a 2 + b 2 − 4 c
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HoQMhYw6-1584789138214)(圖1.png)]
樣本集( X i , Y i ) , i ∈ ( 1 , 2 , 3 , ⋯ , n (X_i, Y_i), i \in (1, 2, 3, \cdots, n ( X i , Y i ) , i ∈ ( 1 , 2 , 3 , ⋯ , n 中,點到圓心的距離爲 d i d_i d i :
d i 2 = ( X i − A ) 2 + ( Y i − B ) 2
d_i^2 = (X_i - A)^2 + (Y_i - B)^2
d i 2 = ( X i − A ) 2 + ( Y i − B ) 2
令,點( X i , Y i ) (X_i, Y_i) ( X i , Y i ) 到圓邊緣的距離的平方與半徑的平方差爲:
δ = d i 2 − R 2 = ( X i − A ) 2 + ( Y i − B ) 2 − R 2 = X i 2 + Y i 2 + a X i + b Y i + c \delta = d_i^2 - R^2 = (X_i - A)^2 + (Y_i - B)^2 - R^2 = X_i^2 + Y_i^2 + aX_i + bY_i + c δ = d i 2 − R 2 = ( X i − A ) 2 + ( Y i − B ) 2 − R 2 = X i 2 + Y i 2 + a X i + b Y i + c
令,Q ( a , b , c ) Q(a, b, c) Q ( a , b , c ) 爲 δ 2 \delta^2 δ 2 的平方和:
Q ( a , b , c ) = ∑ i = 1 n δ i 2 = ∑ i = 1 n [ ( X i 2 + Y i 2 + a X i + b Y i + c ) ] 2
Q(a, b, c) = \sum_{i=1}^n {\delta_i^2} = \sum_{i=1}^n[(X_i^2 + Y_i^2 + aX_i + bY_i + c)]^2
Q ( a , b , c ) = i = 1 ∑ n δ i 2 = i = 1 ∑ n [ ( X i 2 + Y i 2 + a X i + b Y i + c ) ] 2
求參數( a , b , c ) (a, b, c) ( a , b , c ) 使得 Q ( a , b , c ) Q(a, b, c) Q ( a , b , c ) 的值最小。
解:平方差 Q ( a , b , c ) Q(a, b, c) Q ( a , b , c ) 大於等於 0 0 0 ,因此,函數存在大於或等於 0 0 0 的極小值,其最大值爲無窮大;
F ( a , b , c ) F(a, b, c) F ( a , b , c ) 對 ( a , b , c ) (a, b, c) ( a , b , c ) ,令偏導等於 0 0 0 ,則得到極值點,比較所有的極值點函數,即可得到極小值;
∂ Q ( a , b , c ) ∂ a = ∂ ( ∑ i = 1 n [ ( X i 2 + Y i 2 + a X i + b Y i + c ) ] 2 )
\frac{\partial {Q(a, b, c)}}{ \partial a} = \partial ({\sum_{i=1}^n[(X_i^2 + Y_i^2 + aX_i + bY_i + c)]^2})
∂ a ∂ Q ( a , b , c ) = ∂ ( i = 1 ∑ n [ ( X i 2 + Y i 2 + a X i + b Y i + c ) ] 2 )
令,常數 D = ( X i 2 + Y i 2 + b Y i + c ) D = (X_i^2 + Y_i^2 + bY_i + c) D = ( X i 2 + Y i 2 + b Y i + c ) ,則上式可轉化爲:
∂ Q ( a , b , c ) ∂ a = ∂ ( ∑ i = 1 n [ ( D + a X i ) ] 2 ) \frac{\partial {Q(a, b, c)}}{ \partial a} = \partial ({\sum_{i = 1}^n[(D + aX_i)]^2}) ∂ a ∂ Q ( a , b , c ) = ∂ ( i = 1 ∑ n [ ( D + a X i ) ] 2 )
則,
∂ Q ( a , b , c ) ∂ a = ∂ ( ∑ i = 1 n [ ( D 2 + 2 D a X i + X i 2 a 2 ) ] ) = ∑ i = 1 n ( 2 X i 2 a + 2 D X i ) = ∑ i = 1 n 2 ( a X i + D ) X i
\frac{\partial {Q(a, b, c)}}{ \partial a} = \partial({\sum_{i=1}^n[(D^2 + 2DaX_i + X_i^2a^2)]}) =\sum_{i=1}^n{(2X_i^2a + 2DX_i)} = \sum_{i=1}^n2(aX_i + D)X_i
∂ a ∂ Q ( a , b , c ) = ∂ ( i = 1 ∑ n [ ( D 2 + 2 D a X i + X i 2 a 2 ) ] ) = i = 1 ∑ n ( 2 X i 2 a + 2 D X i ) = i = 1 ∑ n 2 ( a X i + D ) X i
將 D D D 代入上式,得:
∂ Q ( a , b , c ) ∂ a = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) X i = 0 (2)
\frac{\partial{Q(a, b, c)}}{\partial a} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c)X_i = 0\tag{2}
∂ a ∂ Q ( a , b , c ) = i = 1 ∑ n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) X i = 0 ( 2 )
同理,可得 b , c b, c b , c 的偏導數:
∂ Q ( a , b , c ) ∂ b = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) Y i = 0 (3)
\frac{\partial{Q(a, b, c)}}{\partial b} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c)Y_i = 0\tag{3}
∂ b ∂ Q ( a , b , c ) = i = 1 ∑ n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) Y i = 0 ( 3 )
∂ Q ( a , b , c ) ∂ c = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) = 0 (4)
\frac{\partial{Q(a, b, c)}}{\partial c} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c) = 0 \tag{4}
∂ c ∂ Q ( a , b , c ) = i = 1 ∑ n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) = 0 ( 4 )
將上述等式,改寫成方程的形式:
{ ∂ Q ( a , b , c ) ∂ a = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) X i = 0 ∂ Q ( a , b , c ) ∂ b = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) Y i = 0 ∂ Q ( a , b , c ) ∂ c = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) = 0
\begin{cases}
\frac{\partial{Q(a, b, c)}}{\partial a} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c)X_i = 0 \\
\frac{\partial{Q(a, b, c)}}{\partial b} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c)Y_i = 0 \\
\frac{\partial{Q(a, b, c)}}{\partial c} = \sum_{i=1}^n 2(X_i^2 + Y_i^2 + aX_i + bY_i + c) = 0
\end{cases}
⎩ ⎪ ⎨ ⎪ ⎧ ∂ a ∂ Q ( a , b , c ) = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) X i = 0 ∂ b ∂ Q ( a , b , c ) = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) Y i = 0 ∂ c ∂ Q ( a , b , c ) = ∑ i = 1 n 2 ( X i 2 + Y i 2 + a X i + b Y i + c ) = 0
根據 ∑ \sum ∑ 運算法則,將常數 提出,並且因爲等式等於0 0 0 ,所以,可以直接省略,得下式;
{ ∂ Q ( a , b , c ) ∂ a = ∑ i = 1 n ( X i 3 + X i Y i 2 + a X i 2 + b X i Y i + c X i ) = 0 ∂ Q ( a , b , c ) ∂ b = ∑ i = 1 n ( X i 2 Y i + Y i 3 + a X i Y i + b Y i 2 + c Y i ) = 0 ∂ Q ( a , b , c ) ∂ c = ∑ i = 1 n ( X i 2 + Y i 2 + a X i + b Y i + c ) = 0
\begin{cases}
\frac{\partial{Q(a, b, c)}}{\partial a} = \sum_{i=1}^n(X_i^3 + X_iY_i^2 + aX_i^2 + bX_iY_i + cX_i) = 0 \\
\frac{\partial{Q(a, b, c)}}{\partial b} = \sum_{i=1}^n(X_i^2Y_i + Y_i^3 + aX_iY_i + bY_i^2 + cY_i) = 0 \\
\frac{\partial{Q(a, b, c)}}{\partial c} = \sum_{i=1}^n(X_i^2 + Y_i^2 + aX_i + bY_i + c) = 0
\end{cases}
⎩ ⎪ ⎨ ⎪ ⎧ ∂ a ∂ Q ( a , b , c ) = ∑ i = 1 n ( X i 3 + X i Y i 2 + a X i 2 + b X i Y i + c X i ) = 0 ∂ b ∂ Q ( a , b , c ) = ∑ i = 1 n ( X i 2 Y i + Y i 3 + a X i Y i + b Y i 2 + c Y i ) = 0 ∂ c ∂ Q ( a , b , c ) = ∑ i = 1 n ( X i 2 + Y i 2 + a X i + b Y i + c ) = 0
將上式展開,成下列形式:
{ ∑ i = 1 n X i 3 + ∑ i = 1 n X i Y i 2 + a ∑ i = 1 n X i 2 + b ∑ i = 1 n X i Y i + c ∑ i = 1 n X i = 0 ∑ i = 1 n X i 2 Y i + ∑ i = 1 n Y i 3 + a ∑ i = 1 n X i Y i + b ∑ i = 1 n Y i 2 + c ∑ i = 1 n Y i = 0 ∑ i = 1 n X i 2 + ∑ i = 1 n Y i 2 + a ∑ i = 1 n X i + b ∑ i = 1 n Y i + ∑ i = 1 n c = 0
\begin{cases}
\sum_{i=1}^n{X_i^3} + \sum_{i=1}^n{X_iY_i^2} + a\sum_{i=1}^n{X_i^2} + b\sum_{i=1}^n{X_iY_i} + c\sum_{i=1}^n{X_i} = 0 \\
\sum_{i=1}^n{X_i^2Y_i} + \sum_{i=1}^n{Y_i^3} + a\sum_{i=1}^n{X_iY_i} + b\sum_{i=1}^n{Y_i^2} + c\sum_{i=1}^n{Y_i} = 0 \\
\sum_{i=1}^n{X_i^2} + \sum_{i=1}^n{Y_i^2} + a\sum_{i=1}^n{X_i} + b\sum_{i=1}^n{Y_i} + \sum_{i=1}^nc = 0
\end{cases}
⎩ ⎪ ⎨ ⎪ ⎧ ∑ i = 1 n X i 3 + ∑ i = 1 n X i Y i 2 + a ∑ i = 1 n X i 2 + b ∑ i = 1 n X i Y i + c ∑ i = 1 n X i = 0 ∑ i = 1 n X i 2 Y i + ∑ i = 1 n Y i 3 + a ∑ i = 1 n X i Y i + b ∑ i = 1 n Y i 2 + c ∑ i = 1 n Y i = 0 ∑ i = 1 n X i 2 + ∑ i = 1 n Y i 2 + a ∑ i = 1 n X i + b ∑ i = 1 n Y i + ∑ i = 1 n c = 0
根據求和公式,得∑ i = 1 n c = N c \sum_{i=1}^n c = Nc ∑ i = 1 n c = N c ,代入方程得:
{ ∑ i = 1 n X i 3 + ∑ i = 1 n X i Y i 2 + a ∑ i = 1 n X i 2 + b ∑ i = 1 n X i Y i + c ∑ i = 1 n X i = 0 ∑ i = 1 n X i 2 Y i + ∑ i = 1 n Y i 3 + a ∑ i = 1 n X i Y i + b ∑ i = 1 n Y i 2 + c ∑ i = 1 n Y i = 0 ∑ i = 1 n X i 2 + ∑ i = 1 n Y i 2 + a ∑ i = 1 n X i + b ∑ i = 1 n Y i + N c = 0
\begin{cases}
\sum_{i=1}^n{X_i^3} + \sum_{i=1}^n{X_iY_i^2} + a\sum_{i=1}^n{X_i^2} + b\sum_{i=1}^n{X_iY_i} + c\sum_{i=1}^n{X_i} = 0 \\
\sum_{i=1}^n{X_i^2Y_i} + \sum_{i=1}^n{Y_i^3} + a\sum_{i=1}^n{X_iY_i} + b\sum_{i=1}^n{Y_i^2} + c\sum_{i=1}^n{Y_i} = 0 \\
\sum_{i=1}^n{X_i^2} + \sum_{i=1}^n{Y_i^2} + a\sum_{i=1}^n{X_i} + b\sum_{i=1}^n{Y_i} + Nc = 0
\end{cases}
⎩ ⎪ ⎨ ⎪ ⎧ ∑ i = 1 n X i 3 + ∑ i = 1 n X i Y i 2 + a ∑ i = 1 n X i 2 + b ∑ i = 1 n X i Y i + c ∑ i = 1 n X i = 0 ∑ i = 1 n X i 2 Y i + ∑ i = 1 n Y i 3 + a ∑ i = 1 n X i Y i + b ∑ i = 1 n Y i 2 + c ∑ i = 1 n Y i = 0 ∑ i = 1 n X i 2 + ∑ i = 1 n Y i 2 + a ∑ i = 1 n X i + b ∑ i = 1 n Y i + N c = 0
所以,解方程組,消去 c c c ,式( 2 ) ∗ N − ( 4 ) ∗ ∑ i = 1 n X i (2)*N - (4)*\sum_{i=1}^nX_i ( 2 ) ∗ N − ( 4 ) ∗ ∑ i = 1 n X i 得
( N ∑ i = 1 n X i 2 − ∑ i = 1 n X i ∑ i = 1 n X i ) a + N ( ∑ i = 1 n X i Y i − ∑ i = 1 n X i ∑ i = 1 n Y i ) b +
(N\sum_{i=1}^n{X_i}^2 - \sum_{i=1}^n{X_i}\sum_{i=1}^n{X_i})a + N(\sum_{i=1}^n{X_iY_i} -\sum_{i=1}^nX_i\sum_{i=1}^nY_i)b +
( N i = 1 ∑ n X i 2 − i = 1 ∑ n X i i = 1 ∑ n X i ) a + N ( i = 1 ∑ n X i Y i − i = 1 ∑ n X i i = 1 ∑ n Y i ) b +
N ∑ i = 1 n X 3 + N ∑ i = 1 n X i Y i 2 − ∑ i = 1 n ( X i 2 + Y i 2 ) ∑ i = 1 n X i = 0 (5)
N\sum_{i=1}^n{X^3} + N\sum_{i=1}^n{X_iY_i^2} - \sum_{i=1}^n(X_i^2 + Y_i^2)\sum_{i=1}^n{X_i} = 0 \tag{{5}}
N i = 1 ∑ n X 3 + N i = 1 ∑ n X i Y i 2 − i = 1 ∑ n ( X i 2 + Y i 2 ) i = 1 ∑ n X i = 0 ( 5 )
( 3 ) ∗ N − ( 4 ) ∗ ∑ i = 1 n Y i (3)*N - (4)*\sum_{i=1}^nY_i ( 3 ) ∗ N − ( 4 ) ∗ ∑ i = 1 n Y i ,得
N ( ∑ i = 1 n X i Y i − ∑ i = 1 n X i ∑ i = 1 n Y i ) a + ( N ∑ i = 1 n Y i 2 − ∑ i = 1 n Y i ∑ i = 1 n Y i ) b +
N(\sum_{i=1}^n{X_i}{Y_i} - \sum_{i=1}^n{X_i}\sum_{i=1}^n{Y_i})a + (N\sum_{i=1}^n{Y_i}^2 - \sum_{i=1}^n{Y_i}\sum_{i=1}^n{Y_i})b +
N ( i = 1 ∑ n X i Y i − i = 1 ∑ n X i i = 1 ∑ n Y i ) a + ( N i = 1 ∑ n Y i 2 − i = 1 ∑ n Y i i = 1 ∑ n Y i ) b +
N ∑ i = 1 n X i 2 Y i + N ∑ i = 1 Y i 3 − ∑ i = 1 n ( X i 2 + Y i 2 ) ∑ i = 1 n Y i = 0 (6)
N\sum_{i=1}^n{X_i^2}{Y_i} + N\sum_{i=1}{Y_i^3} - \sum_{i=1}^n(X_i^2 + Y_i^2)\sum_{i=1}^n{Y_i} = 0 \tag{6}
N i = 1 ∑ n X i 2 Y i + N i = 1 ∑ Y i 3 − i = 1 ∑ n ( X i 2 + Y i 2 ) i = 1 ∑ n Y i = 0 ( 6 )
令:
C = ( N ∑ i = 1 n X i 2 − ∑ i = 1 n X i ∑ i = 1 n X i ) ,
C = (N\sum_{i=1}^n{X_i}^2 - \sum_{i=1}^n{X_i}\sum_{i=1}^n{X_i}),
C = ( N i = 1 ∑ n X i 2 − i = 1 ∑ n X i i = 1 ∑ n X i ) ,
D = N ( ∑ i = 1 n X i Y i − ∑ i = 1 n X i ∑ i = 1 n Y i ) ,
D = N(\sum_{i=1}^n{X_iY_i} -\sum_{i=1}^nX_i\sum_{i=1}^nY_i),
D = N ( i = 1 ∑ n X i Y i − i = 1 ∑ n X i i = 1 ∑ n Y i ) ,
E = N ∑ i = 1 n X i 3 + N ∑ i = 1 n X i Y i 2 − ∑ i = 1 n ( X i 2 + Y i 2 ) ∑ i = 1 n X i
E = N\sum_{i=1}^n{X_i^3} + N\sum_{i=1}^n{X_iY_i^2} - \sum_{i=1}^n(X_i^2 + Y_i^2)\sum_{i=1}^n{X_i}
E = N i = 1 ∑ n X i 3 + N i = 1 ∑ n X i Y i 2 − i = 1 ∑ n ( X i 2 + Y i 2 ) i = 1 ∑ n X i
G = ( N ∑ i = 1 n Y i 2 − ∑ i = 1 n Y i ∑ i = 1 n Y i )
G = (N\sum_{i=1}^n{Y_i}^2 - \sum_{i=1}^n{Y_i}\sum_{i=1}^n{Y_i})
G = ( N i = 1 ∑ n Y i 2 − i = 1 ∑ n Y i i = 1 ∑ n Y i )
H = N ∑ i = 1 n X i 2 Y i + N ∑ i = 1 Y i 3 − ∑ i = 1 n ( X i 2 + Y i 2 ) ∑ i = 1 n Y i
H = N\sum_{i=1}^n{X_i^2}{Y_i} + N\sum_{i=1}{Y_i^3} - \sum_{i=1}^n(X_i^2 + Y_i^2)\sum_{i=1}^n{Y_i}
H = N i = 1 ∑ n X i 2 Y i + N i = 1 ∑ Y i 3 − i = 1 ∑ n ( X i 2 + Y i 2 ) i = 1 ∑ n Y i
則,得方程:
{ C a + D b + E = 0 D a + G b + H = 0
\begin{cases}
Ca + Db + E = 0 \\
Da + Gb + H = 0
\end{cases}
{ C a + D b + E = 0 D a + G b + H = 0
解得:
a = H D − E G C G − D 2 a = \frac{HD-EG}{CG-D^2} a = C G − D 2 H D − E G
b = H C − E D D 2 − C G b = \frac{HC-ED}{D^2-CG} b = D 2 − C G H C − E D
c = − ∑ i = 1 n ( X i 2 + Y i 2 ) + a ∑ i = 1 n X i + b ∑ i = 1 n Y i N
c = -\frac{\sum_{i=1}^n{(X_i^2+Y_i^2)} + a\sum_{i=1}^n{X_i} + b\sum_{i=1}^n{Y_i}}{N}
c = − N ∑ i = 1 n ( X i 2 + Y i 2 ) + a ∑ i = 1 n X i + b ∑ i = 1 n Y i
得到 A 、 B 、 R A、B、R A 、 B 、 R 的估計值,
A = − a 2 , B = − b 2 , R = a 2 + b 2 − 4 c 2 A=-\frac{a}{2}, B=-\frac{b}{2}, R=\frac{\sqrt{a^2 + b^2 - 4c}}{2} A = − 2 a , B = − 2 b , R = 2 a 2 + b 2 − 4 c
注:該方法常用於求迭代方式擬合圓的初始值;
使用 Kåsa 的好處之一就是,如果點( x i , y i ) (x_i, y_i) ( x i , y i ) 碰巧在圓上,則該方法會找到正確的圓;但當樣本點位於小圓弧上時, Kåsa 會偏離很大地估計出一個更小的圓 。
以下兩種,僅作了解,不再給出詳細推導過程
Pratt Fit
kasa方法圓擬合作爲最常見的圓擬合方法,雖然計算方法簡單,效率快,但是擬合結果存在較大偏差(Heavy bias)。通過將 D = ( x − a ) 2 + ( y − b ) 2 D=\sqrt{(x−a)^2+(y−b)^2} D = ( x − a ) 2 + ( y − b ) 2 與半徑R的差值 D − R D−R D − R 轉換爲 D 2 − R 2 D^2−R^2 D 2 − R 2 ,將非線性問題轉換爲線性問題。但是因爲 D 2 − R 2 = d ( d + 2 R ) D^2−R^2=d(d+2R) D 2 − R 2 = d ( d + 2 R ) (令 d = D − R d=D−R d = D − R ),當偏離值 d d d 較大時,Kåsa 方法導致R明顯變小。Pratt 通過將較大時,Kåsa 方法的目標除以 ( 2 R ) 2 (2R)^2 ( 2 R ) 2 的方式,取得更準確的結果。
f = ∑ i = 1 n ( ( x i − a ) 2 + ( y i − b ) 2 − R 2 ) 2 ( 2 R ) 2
f = \frac{\sum_{i=1}^n((x_i-a)^2 + (y_i-b)^2 -R^2)^2}{(2R)^2}
f = ( 2 R ) 2 ∑ i = 1 n ( ( x i − a ) 2 + ( y i − b ) 2 − R 2 ) 2
類似於Kåsa method,pratt 方法將圓方程描述爲 A ( x 2 + y 2 ) + B x + C y + D = 0 A(x^2+y^2)+Bx+Cy+D=0 A ( x 2 + y 2 ) + B x + C y + D = 0 。這樣圓心 ( a , b ) = ( − B 2 A , − C 2 A (a,b)=(−\frac{B}{2A},−\frac{C}{2A} ( a , b ) = ( − 2 A B , − 2 A C ,半徑 R = B 2 + X 2 − 4 A D 2 A R=\frac{\sqrt{B^2 + X^2 -4AD}}{2A} R = 2 A B 2 + X 2 − 4 A D 。注意,A有可能爲0,此時圓擬合方法得到的是一條直線,或者說一個曲率爲0的圓。但是在這裏,因爲A,B,C,D的值乘以一個標量也不會改變圓的方程,可以讓A=1,所以目標方程可以改寫爲:
f = ( ∑ A ( x 2 + Y 2 ) + B x + C y + D B 2 + C 2 − 4 A D ) 2
f = (\frac{\sum{A(x^2+Y^2)+Bx+Cy+D}}{B^2+C^2-4AD})^2
f = ( B 2 + C 2 − 4 A D ∑ A ( x 2 + Y 2 ) + B x + C y + D ) 2
Pratt 將這個方程轉化爲求:g = ( ∑ A ( x i 2 + y i 2 ) + B x i + C y i + D ) 2 g = (\sum{A(x_i^2+y_i^2)+Bx_i+Cy_i+D})^2 g = ( ∑ A ( x i 2 + y i 2 ) + B x i + C y i + D ) 2 的最小值,並在約束條件:B 2 + C 2 − 4 A D = 1 B^2+C^2-4AD=1 B 2 + C 2 − 4 A D = 1 的條件下。
慣例上將上式寫成矩陣的形式:
g = A T M A ( A ⃗ = [ A , B , C , D ] ; M = [ ∑ z 2 ∑ x z ∑ y z ∑ z ∑ x z ∑ x 2 ∑ x y ∑ x ∑ y z ∑ x y ∑ y 2 ∑ y ∑ z ∑ x ∑ y n ] ; z i = x i 2 + y i 2 )
g = A^TMA(\vec{A}=[A,B,C,D];M = \left[
\begin{matrix}
\sum{z^2} & \sum{xz} & \sum{yz} & \sum{z} \\
\sum{xz} & \sum{x^2} & \sum{xy} & \sum{x} \\
\sum{yz} & \sum{xy} & \sum{y^2} & \sum{y} \\
\sum{z} & \sum{x} & \sum{y} & n
\end{matrix}
\right];z_i = x_i^2 + y_i^2
)
g = A T M A ( A = [ A , B , C , D ] ; M = ⎣ ⎢ ⎢ ⎡ ∑ z 2 ∑ x z ∑ y z ∑ z ∑ x z ∑ x 2 ∑ x y ∑ x ∑ y z ∑ x y ∑ y 2 ∑ y ∑ z ∑ x ∑ y n ⎦ ⎥ ⎥ ⎤ ; z i = x i 2 + y i 2 )
A T B A = [ A B C D ] [ 0 0 0 − 2 0 1 0 0 0 0 1 0 − 2 0 0 0 ] [ A B C D ] = 1
A^TBA = \left[
\begin{matrix}
A & B & C & D
\end{matrix}
\right]
\left[
\begin{matrix}
0 & 0 & 0 & -2 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
-2 & 0 & 0 & 0
\end{matrix}
\right]
\left[
\begin{matrix}
A \\
B \\
C \\
D
\end{matrix}
\right] = 1
A T B A = [ A B C D ] ⎣ ⎢ ⎢ ⎡ 0 0 0 − 2 0 1 0 0 0 0 1 0 − 2 0 0 0 ⎦ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎡ A B C D ⎦ ⎥ ⎥ ⎤ = 1
通過引入拉格朗日乘子解決最小值問題:
g ( A , η ) = A T M A – η ( A T B A − 1 ) g(A,\eta)=ATMA–\eta(ATBA−1) g ( A , η ) = A T M A – η ( A T B A − 1 )
對 A ⃗ \vec{A} A 求偏導: M A – η B A = 0 MA–\eta BA=0 M A – η B A = 0 。因爲B B B 可逆,可以變換爲 B − 1 M A = η A B^{−1}MA=\eta A B − 1 M A = η A 。可知 η \eta η 爲矩陣 B − 1 M B^{-1}M B − 1 M 的特徵值,A爲其特徵向量。
由 M A – η B A = 0 MA–\eta BA=0 M A – η B A = 0 可得A T M A – η A T B A = A T M A − η = 0 ATMA–\eta ATBA=ATMA−\eta=0 A T M A – η A T B A = A T M A − η = 0 ,即A T M A ATMA A T M A 的極值爲η \eta η ,那麼矩陣B − 1 M B^{−1}M B − 1 M 有四個特徵值,最小的特徵值就是A T M A ATMA A T M A 的最小值?不然。如果 η < 0 \eta < 0 η < 0 ,那麼擬合出的圓將沒有意義,因爲A T M A ≥ 0 ATMA \ge 0 A T M A ≥ 0 。(Nikolai Chernov 教授經過複雜的證明,B − 1 M B^{−1}M B − 1 M 存在一個負特徵值。)因此,A A A 的值應該是對應矩陣B − 1 M B^{−1}M B − 1 M 最小非負特徵值的特徵向量。
算法分析
pratt 方法有兩個明顯優勢,一個是消除了半徑的影響,使得曲率半徑非常大、噪音大的情況下算法也能正確運行。
一個是在方程式上融合了直線方程,當係數A=0時,求得的曲線是直線,在實際應用中,不清楚待擬合曲線爲直線還是曲線的情況下非常有效。
還有一點就是 pratt 方法的效率也比較高,因此是一種非常實用的方法。
Taubin Fit
注:暫時只作簡單瞭解
Taubin Fit 的最小擬合函數爲:
F T = [ ∑ ( x i − a ) 2 + ( y i − b ) 2 − R 2 ] 2 4 n − 1 ∑ [ ( x i − a ) 2 + ( y i − b ) 2 ]
F_T = \frac{[\sum{(x_i-a)^2 + (y_i-b)^2}-R^2]^2}{4n^{-1}\sum{[(x_i-a)^2 + (y_i-b)^2]}}
F T = 4 n − 1 ∑ [ ( x i − a ) 2 + ( y i − b ) 2 ] [ ∑ ( x i − a ) 2 + ( y i − b ) 2 − R 2 ] 2
轉化爲下列形式:
F T = [ A z i 2 + B x i + C y i + D ] 2 n − 1 ∑ 4 A 2 z i + 4 A B x i + 4 A C y i + B 2 + C 2
F_T = \frac{[Az_i^2 + Bx_i + Cy_i + D]^2}{n^{-1}\sum{4A^2z_i + 4ABx_i + 4ACy_i + B^2 + C^2}}
F T = n − 1 ∑ 4 A 2 z i + 4 A B x i + 4 A C y i + B 2 + C 2 [ A z i 2 + B x i + C y i + D ] 2
將上述公式,求最小值,等效爲:
4 A 2 z ‾ + 4 A B x ‾ + 4 A C y ‾ + B 2 + C 2 = 1
4A^2 \overline{z} + 4AB \overline{x} + 4AC \overline{y} + B^2 + C^2 = 1
4 A 2 z + 4 A B x + 4 A C y + B 2 + C 2 = 1
其中,x ‾ = 1 n ∑ x i \overline{x} = \frac{1}{n}\sum{x_i} x = n 1 ∑ x i 。
迭代重加權最小二乘法(IRLS, iteratively reweighted least-squares)
加權最小二乘法是對原模型進行加權,使之成爲一個新的不存在異方差性的模型,然後採用普通最小二乘法估計其參數的一種數學優化技術。加權迭代最小二乘 IRLS屬於 穩健迴歸方法 ,常用於樣本較少的迴歸,IRLS 屬於 M-Estimators 。
迭代加權最小二乘法在圖形擬閤中的應用
最小二乘法擬合圖形,對於離羣值是不足夠可靠的,由於採用的是平方距離,所以,與圖形距離遠的那些點,在最優化過程中會擁有非常大的權重值。爲了減輕這些影響,我們可以爲每個點引入權重 w i w_i w i 。對於遠離線的那些點,其權重應該 ≪ 1 \ll 1 ≪ 1 。
權重值 w i w_i w i 該如何定義 ?因爲我們想要給出距離遠的那些點較小的權重,所以權重必須是基於點到圖形的距離。不幸的是,在我們還沒有擬合出圖形的方程時,我們並不能得到這些距離,所以這看起來是個不可能的要求。解決的方法是用多次的迭代來擬合直線。在第一次迭代中使用 w i = 1 w_i = 1 w i = 1 ,即執行一個標準的直線擬合計算出距離δ i \delta_i δ i 。通過用一個權重函數 w ( δ ) w(\delta) w ( δ ) 可用已經計算出的距離來定義權重,這些權重用於後續的迭代處理中,這個方法稱爲迭代重加權最小二乘法(IRLS) 。
在實踐中,可以使用以下兩個權重函數中的任何一個,這兩個權重函數的應用效果都很好。第一個權重函數是由 Huber 提出的,其定義爲:
w ( δ ) = { 1 , ∣ δ ∣ ≤ τ τ ∣ δ ∣ ∣ δ ∣ > τ
w(\delta) = \begin{cases}
1, \quad |\delta| \le \tau \\
\frac{\tau}{|\delta|} \quad |\delta| > \tau
\end{cases}
w ( δ ) = { 1 , ∣ δ ∣ ≤ τ ∣ δ ∣ τ ∣ δ ∣ > τ
上式中,參數 τ \tau τ 是削波因數 ,它定義哪些點應該被視爲離羣值。請記住所有距離 ≤ τ \le \tau ≤ τ 的點對應的權重都是 1 1 1 。這意味着,對於小的距離的點,在極小化處理中就直接使用平方距離。另一方面,對於距離 > τ > \tau > τ 的點,將獲得一個更小些的權重。事實上,在最優化計算中,此權重函數爲那些距離遠的點選定了其距離值而不是平方距離值參加運算。有時,選定的權重值不足夠的小 ,所以不能完抑制離羣值。這種情況下,可以使用 Tukey 權重函數,其定義爲:
w ( δ ) = { ( 1 − ( δ τ ) 2 ) 2 , ∣ δ ∣ ≤ τ 0 , ∣ δ ∣ > τ
w(\delta) = \begin{cases}
{(1 - (\frac{\delta}{\tau})^2)}^2, |\delta| \le \tau \\
0, \qquad \qquad |\delta| > \tau
\end{cases}
w ( δ ) = { ( 1 − ( τ δ ) 2 ) 2 , ∣ δ ∣ ≤ τ 0 , ∣ δ ∣ > τ
上式中的 τ \tau τ 也是削波因數。注意 此權重函數完全忽略那些距離 > τ > \tau > τ 的點。而對於 ≤ τ \le \tau ≤ τ 的點,其權重值在 1 1 1 到 0 0 0 之間平滑變化。
削波因數的計算
在上面的兩個權重函數中,削波因數指明哪些點應該被視爲離羣值。因爲削波因數代表的是一個距離,所以它可以被手動設置。但是,這將忽視噪聲的分佈和數據中的離羣值,所以不得不針對每個 應用來進行調整。從數據自身來推出削波因數會更方便。這通常可以基於到圖形的這些距離值的標準偏差來實現。因爲我們想得到的是數據中離羣值 ,所以我們不能使用正規的標準偏差 ,而n必須使用對於離羣值是可靠的標準偏差 。一般情況下,下式用來計算這個可靠的標準偏差:
σ δ = m e d i a n ∣ δ i ∣ 0.6745
\sigma_{\delta} = \frac{median|\delta_i|}{0.6745}
σ δ = 0 . 6 7 4 5 m e d i a n ∣ δ i ∣
對於正態分佈的距離值 ,分母上的常數量被選定爲適用於基於正態分佈計算的標準偏差。削波因子則被設置爲 σ δ \sigma_{\delta} σ δ 的一個小倍數,如 τ = 2 σ δ \tau = 2\sigma{\delta} τ = 2 σ δ 。
Huber 函數
在統計學習角度,Huber損失函數是一種使用魯棒性迴歸的損失函數,它相比均方誤差來說,它對異常值不敏感。常常被用於分類問題上。
Huber 函數的定義 :
只給出了定義,沒有給出原因,且論文中的文獻爲相關理論的圖書,若有需要,可詳細閱讀
ρ H = { 1 2 e 2 , ∣ e ∣ ≤ k , k ∣ e ∣ − 1 2 k 2 , ∣ k ∣ > e
\rho_H = \begin{cases}
\frac{1}{2} e^2, \quad \qquad |e| \le k, \\
k|e| - \frac{1}{2} k^2, |k| > e
\end{cases}
ρ H = { 2 1 e 2 , ∣ e ∣ ≤ k , k ∣ e ∣ − 2 1 k 2 , ∣ k ∣ > e
Huber 損失函數常常用於魯棒性系統分析,M元估計和適應性建模。
下面給出最小二乘法(LS)、Huber 和 Tukey Bisquare 的函數及其權重函數對應表
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-AMhJ2wbD-1584789138217)(圖3.png)]
上圖中,所示的函數圖像、導函數圖像及權重函數圖像,如下圖所示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HYfMpaQY-1584789138218)(圖4.png)]
如上圖所示,從左到,分別爲對應的函數圖像、導函數圖像及權重函數圖像。
M 估計
M 估計是基於最小二乘估計發展起來的一種抗差估計(Robust Estimation)方法。
M 估計的發展
理論研究和實踐經驗表明高斯一馬爾可夫模型的最小二乘估計,存在不足不穩健,也就是粗差發生時,參數的最小二乘估計不可靠,與其真值偏離太遠。誤差分佈不是正態分佈時,最小二乘估計不是最優估計。針對問題,最小二乘法的創立者之一,法國科學家勒讓得指出,在使用最小二乘法時,要注意那些大的偏離值粗差可見,粗差問題不是現代才注意到,但其系統研究卻是始於世紀年代,並被定義爲估計,年發表的論文“位置參數的穩健估計”是其標誌。在年,他將此方法用於一般的多元線性模型,自那以後,這個領域不僅受到統計學家的重視,更受到應用工作者的重視和歡迎,在測繪科學也不例外,幾十年來,理論和應用上產生了一批重要成果並且對問題當誤差不是正態分佈時,在估計中可以找到優於最小二乘法的估計。
儘管估計的初衷是爲了解決最小二乘法的不穩健問題,但從它的發展來看永遠超越了它最初的目的,實際上它是包括了穩健估計、最小二乘估計在內的一個廣義的估計類。
M 估計的極值法定義
對獨立同分布等精度模型:
L = A X − Δ L = AX - {\Delta} L = A X − Δ
D ( Δ ) = δ 2 I D({\Delta}) = \delta^2I D ( Δ ) = δ 2 I
選定一個定義於一維歐氏空間 R R R 的實函數 ρ \rho ρ ,令
∑ i = 1 n ρ ( a i T X − L )
\sum_{i=1}^n \rho(a_i^TX -L)
i = 1 ∑ n ρ ( a i T X − L )
式中 a i T a_i^T a i T 是設計矩陣的行向量:X X X 又是極值解這種估計就稱爲M估計 ,是 Huber 於1964年在發表的論文“位置參數的穩健估計”中引進的位置參數模型就是上式中只有一個未知參數、設計矩陣,A=(1,1…1)的情況。1973年,Huber 進一步將這種估計拓展到獨立同分布等精度的線性函數模型。應用中,我們常常面臨獨立同分布不等精度模型,由此拓展上式爲:
∑ i = 1 n ρ ( P i 1 2 ( a i T X − L ) ) = m i n ∑ i = 1 n ρ ( P i 1 2 ( a i T X − L ) )
\sum_{i=1}^n\rho(P_i^{\frac{1}{2}} (a_i^TX - L)) = min\sum_{i=1}^n\rho(P_i^{\frac{1}{2}}(a_i^TX - L))
i = 1 ∑ n ρ ( P i 2 1 ( a i T X − L ) ) = m i n i = 1 ∑ n ρ ( P i 2 1 ( a i T X − L ) )
式中 P P P 是相應觀測量或觀測誤差的權。
Huber引入估計的動機是追求參數估計的穩健性,這是最小二乘估計所缺乏的。但要注意到,穩健性只是參數估計的一個性質,這個性質與最優性不同,我們不能說愈穩健就愈好。對基於正態分佈的參數估計,過於強調穩健性會導致效率損失 。
幾何擬合(geometric fitting)
幾何擬合(也稱爲最佳擬合) ,其誤差距離定義爲從給定點到要擬合的幾何特徵的正交距離或最短距離。幾何擬合可能是上述所有代數擬合問題的唯一解決方案 。各種誤差量度的擬合優度測試已將幾何誤差量度用作基準。
圓的幾何擬合是一個非線性問題,必須用迭代法來進行求解。
雅克比矩陣
在向量微積分中,雅可比矩陣是一階偏導數以一定方式排列成的矩陣,其行列式稱爲雅可比行列式。雅可比矩陣的重要性在於它體現了一個可微方程與給出點的最優線性逼近。因此,雅可比矩陣類似於多元函數的導數。
雅克比矩陣的定義
假設 F : R n → R m F: \mathbb{R_n}\rightarrow \mathbb{R_m} F : R n → R m ,是一個從 n n n 維歐氏空間映射到到 m m m 維歐氏空間的函數。這個函數由 m m m 個實數組成:
{ y 1 = f ( x 1 , x 2 , ⋯ , x n ) , y 2 = f ( x 1 , x 2 , ⋯ , x n ) , ⋯ y m = f ( x 1 , x 2 , ⋯ , x n )
\begin{cases}
y_1 = f(x_1, x_2, \cdots, x_n), \\
y_2 = f(x_1, x_2, \cdots, x_n), \\
\cdots \\
y_m = f(x_1, x_2, \cdots, x_n)
\end{cases}
⎩ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎧ y 1 = f ( x 1 , x 2 , ⋯ , x n ) , y 2 = f ( x 1 , x 2 , ⋯ , x n ) , ⋯ y m = f ( x 1 , x 2 , ⋯ , x n )
這些函數的偏導數(如果存在)可以組成一個 m m m 行 n n n 列的矩陣,這個矩陣就是所謂的雅可比矩陣:
J = [ ∂ f ∂ x 1 ∂ f ∂ x 2 ⋯ ∂ f ∂ x n ] = [ ∂ y 1 ∂ x 1 ⋯ ∂ y 1 ∂ x n ⋮ ⋱ ⋮ ∂ y m ∂ x 1 ⋯ ∂ y m ∂ x n ]
J = \left [
\begin{matrix}
\frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} & \cdots & \frac{\partial f}{\partial x_n}
\end{matrix}
\right] =
\left[
\begin{matrix}
\frac{\partial y_1}{\partial x_1} & \cdots & \frac{\partial y_1}{\partial x_n} \\
\vdots & \ddots & \vdots \\
\frac{\partial y_m}{\partial x_1} & \cdots & \frac{\partial y_m}{\partial x_n}
\end{matrix}
\right]
J = [ ∂ x 1 ∂ f ∂ x 2 ∂ f ⋯ ∂ x n ∂ f ] = ⎣ ⎢ ⎡ ∂ x 1 ∂ y 1 ⋮ ∂ x 1 ∂ y m ⋯ ⋱ ⋯ ∂ x n ∂ y 1 ⋮ ∂ x n ∂ y m ⎦ ⎥ ⎤
向量微積分
把向量中的對應位置的元素進行求導,但是,這些元素的組織方式有兩種,分別是分子佈局和分母佈局,二者並無本質上的差別,只是結果相差個轉置。
例如求∂ y ∂ x \frac{\partial y}{\partial x} ∂ x ∂ y ,其中 y y y 是 n n n 維列向量,x x x 是標量。這個求導就是把 y y y 裏每個元素分別對 y y y 求導,但求導後是得到列向量還是行向量呢?
對於分子佈局:
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋮ ∂ y n ∂ x ]
\frac{\partial y}{\partial x} =
\left[
\begin{matrix}
\frac{\partial y_1}{\partial x} \\
\\
\frac{\partial y_2}{\partial x} \\
\vdots \\
\frac{\partial y_n}{\partial x}
\end{matrix}
\right]
∂ x ∂ y = ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡ ∂ x ∂ y 1 ∂ x ∂ y 2 ⋮ ∂ x ∂ y n ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤
對於分子佈局:
∂ y ∂ x = [ ∂ y 1 ∂ x ∂ y 2 ∂ x ⋯ ∂ y n ∂ x ]
\frac{\partial y}{\partial x} =
\left[
\begin{matrix}
\frac{\partial y_1}{\partial x} & \frac{\partial y_2}{\partial x} & \cdots & \frac{\partial y_n}{\partial x}
\end{matrix}
\right]
∂ x ∂ y = [ ∂ x ∂ y 1 ∂ x ∂ y 2 ⋯ ∂ x ∂ y n ]
其中輸入向量 x ⃗ = ( x 1 , ⋯ , x n ) \vec{x} = (x_1, \cdots , x_n) x = ( x 1 , ⋯ , x n ) ,輸出向量 y ⃗ = ( y 1 , ⋯ , y m ) \vec{y} = (y_1, \cdots, y_m) y = ( y 1 , ⋯ , y m ) ,$x \in \mathbb{R_n} , , , y = f(x) \in \mathbb{R_m}$。
如果 p p p 是中的一個點,F F F 在 p p p 點可微分,根據數學分析,雅可比矩陣是在這點的導數。在此情況下,這個線性映射,即 F F F 在點 p p p 附近的最優線性逼近,也就是說當 x x x 足夠靠近點 p p p 時,我們有:
F ( x ) ≈ F ( p ) + J F ( p ) ⋅ ( x − p ) F(x) \approx F(p) + J_F(p) \cdot (x - p) F ( x ) ≈ F ( p ) + J F ( p ) ⋅ ( x − p )
高斯 - 牛頓迭代法
高斯- 牛頓迭代法的定義
高斯一牛頓迭代法(Gauss-Newton iteration method)是非線性迴歸模型中求迴歸參數進行最小二乘的一種迭代方法,該法使用泰勒級數展開式去近似地代替非線性迴歸模型,然後通過多次迭代,多次修正迴歸係數,使迴歸係數不斷逼近非線性迴歸模型的最佳迴歸係數,最後使原模型的殘差平方和達到最小。其直觀思想是先選取一個參數向量的參數值 β \beta β ,若函數 f t ( X t , β ) f_t(X_t,\beta) f t ( X t , β ) 在 β 0 \beta_0 β 0 附近有連續二階偏導數,則在 β 0 \beta_0 β 0 的鄰域內可近似地將 f t ( X t , β ) f_t(X_t, \beta) f t ( X t , β ) 看作是線性,因而可近似地用線性最小二乘法求解。
高斯-牛頓迭代的求解步驟
高斯-牛頓法的一般步驟,如下所示:
初始值的選擇
初始值的選擇有三種方法:
根據以往的經驗選定初始值;
用分段法求出初始值;
對於可線性化的非線性迴歸模型,通過線性變換,然後實行最小平方法求出初始值。
泰勒級數展開式
設非線性迴歸模型爲
y ^ = f ( x i , r ) + ε i , ( i = 1 , 2 , ⋯ n ) (1) \hat y = f(x_i, r) + \varepsilon_i,\quad (i = 1, 2, \cdots n) \tag{1} y ^ = f ( x i , r ) + ε i , ( i = 1 , 2 , ⋯ n ) ( 1 )
其中,r r r 爲待估計迴歸係數,誤差項 ε i ∼ N ( 0 , σ 2 ) \varepsilon_i \thicksim N(0, \sigma^2) ε i ∼ N ( 0 , σ 2 ) 。
設 g 0 ( g 0 ( 0 ) , g 1 ( 0 ) , g 2 ( 0 ) , ⋯ , g p − 1 ( 0 ) ) T g^0(g_0^{(0)}, g_1^{(0)}, g_2^{(0)}, \cdots, g_{p-1}^{(0)})^T g 0 ( g 0 ( 0 ) , g 1 ( 0 ) , g 2 ( 0 ) , ⋯ , g p − 1 ( 0 ) ) T 爲待估迴歸係數 r = ( r 0 , r 1 , r 2 , ⋯ , r p − 1 ) T r = (r_0, r_1, r_2, \cdots, r_{p-1})^T r = ( r 0 , r 1 , r 2 , ⋯ , r p − 1 ) T 的初始值,將式( 1 ) f ( x i , r ) (1) f(x_i,r) ( 1 ) f ( x i , r ) 在 g g g 點附近的泰勒展開,並略去非線性迴歸模型的二階及二階以上的偏導數項,得:
f ( x i , r ) = f ( x i , g ( 0 ) ) + ∑ k = 0 ( p − 1 ) [ ∂ f ( x i , r ) ∂ r k ] r = g ( 0 ) ( r k − g k ( 0 ) ) (2)
f(x_i, r) = f(x_i, g^{(0)}) + \sum_{k=0}^{(p-1)}[\frac{\partial f(x_i, r)}{\partial r_k}]_{r=g^{(0)}}(r_k - g_k^{(0)}) \tag{2}
f ( x i , r ) = f ( x i , g ( 0 ) ) + k = 0 ∑ ( p − 1 ) [ ∂ r k ∂ f ( x i , r ) ] r = g ( 0 ) ( r k − g k ( 0 ) ) ( 2 )
將式 ( 2 ) (2) ( 2 ) 代人式 ( 1 ) (1) ( 1 ) ,則
y i ≈ f ( x i , g ( 0 ) ) + ∑ k = 0 ( p − 1 ) [ ∂ f ( x i , r ) ∂ r k ] r = g ( 0 ) ( r k − g k ( 0 ) ) + ε i
y_i \thickapprox f(x_i, g^{(0)}) + \sum_{k=0}^{(p-1)}[\frac{\partial f(x_i, r)}{\partial r_k}]_{r=g^{(0)}}(r_k - g_k^{(0)}) + \varepsilon_i
y i ≈ f ( x i , g ( 0 ) ) + k = 0 ∑ ( p − 1 ) [ ∂ r k ∂ f ( x i , r ) ] r = g ( 0 ) ( r k − g k ( 0 ) ) + ε i
移項,有
y i − f ( x i , g ( 0 ) ) ≈ ∑ k = 0 ( p − 1 ) [ ∂ f ( x i , r ) ∂ r k ] r = g ( 0 ) ( r k − g k ( 0 ) ) + ε i
y_i - f(x_i, g^{(0)}) \thickapprox \sum_{k=0}^{(p-1)}[\frac{\partial f(x_i, r)}{\partial r_k}]_{r=g^{(0)}}(r_k - g_k^{(0)}) + \varepsilon_i
y i − f ( x i , g ( 0 ) ) ≈ k = 0 ∑ ( p − 1 ) [ ∂ r k ∂ f ( x i , r ) ] r = g ( 0 ) ( r k − g k ( 0 ) ) + ε i
令, y i 0 = y i − f ( x i , g ( 0 ) ) , D i k ( 0 ) = [ ∂ f ( x i , r ) ∂ r k ] r = g ( 0 ) , b k ( 0 ) = r k − g k ( 0 ) y_i^0 = y_i - f(x_i, g^{(0)}), D_{ik}^{(0)} = [\frac{\partial f(x_i, r)}{\partial r_k}]_{r=g^{(0)}},b_k^{(0)} = r_k - g_k^{(0)} y i 0 = y i − f ( x i , g ( 0 ) ) , D i k ( 0 ) = [ ∂ r k ∂ f ( x i , r ) ] r = g ( 0 ) , b k ( 0 ) = r k − g k ( 0 ) 則,
y i 0 ≈ ∑ k = 0 ( p − 1 ) D ( i k ) ( 0 ) b k ( 0 ) + ε i ( i = 1 , 2 , ⋯ , n )
y_i^0 \thickapprox \sum_{k = 0}^{(p-1)} D_{(ik)}^{(0)}b_k^{(0)} + \varepsilon_i \quad (i = 1, 2, \cdots, n)
y i 0 ≈ k = 0 ∑ ( p − 1 ) D ( i k ) ( 0 ) b k ( 0 ) + ε i ( i = 1 , 2 , ⋯ , n )
用矩陣形式表示,則上式爲:
Y ( 0 ) ≈ D ( 0 ) b ( 0 ) + ε , (3)
Y^{(0)} \thickapprox D^{(0)}b^{(0)} + \varepsilon, \tag{3}
Y ( 0 ) ≈ D ( 0 ) b ( 0 ) + ε , ( 3 )
其中,
Y n × p ( 0 ) = [ y 1 − f ( x 1 , g ( 0 ) ) ⋯ y n − f ( x n , g ( 0 ) ) ] , D n × p 0 = [ D 10 ( 0 ) ⋯ D 1 ( p − 1 ) ( 0 ) ⋮ ⋮ D ( n 0 ) ( 0 ) ⋯ D n ( p − 1 ) ( 0 ) ] , D p × 1 0 = [ b 0 ( 0 ) ⋮ b p − 1 ( 0 ) ] Y_{n \times p}^{(0)} =
\left[
\begin{matrix}
y_1 - f(x_1, g^{(0)}) \\
\cdots \\
y_n - f(x_n, g^{(0)})
\end{matrix}
\right],
D_{n \times p}^0 =
\left[
\begin{matrix}
D_{10}^{(0)} & \cdots & D_{1(p-1)}^{(0)} \\
\vdots & & \vdots \\
D_{(n0)}^{(0)} & \cdots & D_{n(p-1)}^{(0)}
\end{matrix}
\right],
D_{p \times 1}^0 =
\left[
\begin{matrix}
b_0^{(0)} \\
\vdots \\
b_{p-1}^{(0)}
\end{matrix}
\right]
Y n × p ( 0 ) = ⎣ ⎡ y 1 − f ( x 1 , g ( 0 ) ) ⋯ y n − f ( x n , g ( 0 ) ) ⎦ ⎤ , D n × p 0 = ⎣ ⎢ ⎢ ⎡ D 1 0 ( 0 ) ⋮ D ( n 0 ) ( 0 ) ⋯ ⋯ D 1 ( p − 1 ) ( 0 ) ⋮ D n ( p − 1 ) ( 0 ) ⎦ ⎥ ⎥ ⎤ , D p × 1 0 = ⎣ ⎢ ⎢ ⎡ b 0 ( 0 ) ⋮ b p − 1 ( 0 ) ⎦ ⎥ ⎥ ⎤
估計修正因子
用最小二乘法對式 ( 3 ) (3) ( 3 ) 估計修正則
b ( 0 ) = ( D ( 0 ) T D ( 0 ) ) − 1 D ( 0 ) T Y ( 0 ) , (4) b^{(0)} = (D^{(0)T}D^{(0)})^{-1}D^{(0)T}Y^{(0)}, \tag{4} b ( 0 ) = ( D ( 0 ) T D ( 0 ) ) − 1 D ( 0 ) T Y ( 0 ) , ( 4 )
設 g ( 0 ) g^{(0)} g ( 0 ) 爲第一個迭代值,則g ( 1 ) = g ( 0 ) + b ( 0 ) g^{(1)} = g^{(0)} + b^{(0)} g ( 1 ) = g ( 0 ) + b ( 0 ) 。
精度的檢驗
設殘差平方和爲:
S S R ( s ) = ∑ i = 0 n [ y i − f ( x i , g ( s ) ) ] 2
SSR^{(s)} = \sum_{i=0}^n[y_i - f(x_i, g^{(s)})]^2
S S R ( s ) = i = 0 ∑ n [ y i − f ( x i , g ( s ) ) ] 2
其中,s s s 內重夏迭代次數。對於給定的允許誤差率K K K ,當∣ S S R ( s ) − S S R ( s − 1 ) S S R ( s ) ∣ ≤ K |\frac{SSR^{(s)} - SSR^{(s-1)}}{SSR^{(s)}}| \le K ∣ S S R ( s ) S S R ( s ) − S S R ( s − 1 ) ∣ ≤ K 時,終止迭代,否則,對式( 4 ) (4) ( 4 ) 做下一次迭代。
重複迭代
重複式( 4 ) (4) ( 4 ) ,當重複迭代 s s s 次時,則有修正因子 b ( s ) = ( D ( s ) T D ( s ) ) − 1 D ( s ) T Y ( s ) b^{(s)} = (D^{(s)T}D^{(s)})^{-1}D^{(s)T}Y^{(s)} b ( s ) = ( D ( s ) T D ( s ) ) − 1 D ( s ) T Y ( s ) ,第 ( s + 1 ) (s + 1) ( s + 1 ) 次迭代值g ( s + 1 ) = g ( s ) + b ( s ) g^{(s+1)} = g^{(s)} + b^{(s)} g ( s + 1 ) = g ( s ) + b ( s ) 。
泰勒公式
泰勒公式,應用於數學、物理領域,是一個用函數在某點的信息描述其附近取值 的公式。如果函數足夠平滑的話,在已知函數在某一點的各階導數值的情況之下,泰勒公式可以用這些導數值做係數構建一個多項式來近似函數在這一點的鄰域中的值。泰勒公式還給出了這個多項式和實際的函數值之間的偏差。
泰勒公式的定義
泰勒公式是將一個在 x = x 0 x=x_0 x = x 0 處具有 n n n 階導數的函數 f ( x ) f(x) f ( x ) 利用關於 ( x − x 0 ) (x-x_0) ( x − x 0 ) 的 n n n 次多項式來逼近函數的方法。
若函數 f ( x ) f(x) f ( x ) 在包含 x 0 x_0 x 0 的某個閉區間 [ a , b ] [a,b] [ a , b ] 上具有 n n n 階導數,且在開區間 ( a , b ) (a,b) ( a , b ) 上具有 ( n + 1 ) (n+1) ( n + 1 ) 階導數,則對閉區間 [ a , b ] [a,b] [ a , b ] 上任意一點x,成立下式:
f ( x ) = x 0 0 ! + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) + ⋯ + f ( n ) ( x 0 ) n ! + R n ( x )
f(x) = \frac{x_0}{0!} + \frac{f'(x_0)}{1!} (x - x_0) + \frac{f''(x_0)}{2!} (x - x_0) + \cdots + \frac{f^{(n)}(x_0)}{n!} + R_n(x)
f ( x ) = 0 ! x 0 + 1 ! f ′ ( x 0 ) ( x − x 0 ) + 2 ! f ′ ′ ( x 0 ) ( x − x 0 ) + ⋯ + n ! f ( n ) ( x 0 ) + R n ( x )
其中, f ( n ) ( x ) f^{(n)}(x) f ( n ) ( x ) 表示 f ( x ) f(x) f ( x ) 的 n n n 階導數,等號後的多項式稱爲函數 f ( x ) f(x) f ( x ) 在x 0 x_0 x 0 處的泰勒展開式,剩餘的 R n ( x ) R_n(x) R n ( x ) 是泰勒公式的餘項,是 ( x − x 0 ) n (x-x_0)^n ( x − x 0 ) n 的高階無窮小。
泰勒公式的餘項 $R_n(x) $ ,可以寫成以下幾種形式:
佩亞諾(Peano)餘項:
R n ( x ) = o [ ( x − x n ) n ] R_n(x) = o[(x - x_n)^n] R n ( x ) = o [ ( x − x n ) n ]
這裏只需要n階導數存在。
施勒米爾希-羅什(Schlomilch-Roche)餘項:
R n ( x ) = f ( n + 1 ) [ x 0 + θ ( x − x 0 ) ] ( 1 − θ ) n + 1 − p ( x − x 0 ) n + 1 n ! p
R_n(x) = f^{(n+1)} [x_0 + \theta(x - x_0)] \frac{(1 - \theta)^{n + 1 - p} (x - x_0)^{n+1}}{n!p}
R n ( x ) = f ( n + 1 ) [ x 0 + θ ( x − x 0 ) ] n ! p ( 1 − θ ) n + 1 − p ( x − x 0 ) n + 1
其中, θ ∈ ( 0 , 1 ) \theta \in (0,1) θ ∈ ( 0 , 1 ) ,p p p 爲任意正實數。(注意到 p = n + 1 p=n+1 p = n + 1 與 p = 1 p=1 p = 1 分別對應拉格朗日餘項與柯西餘項)
拉格朗日(Lagrange)餘項:
R n ( x ) = f ( n + 1 ) [ x 0 + θ ( x − x 0 ) ] ( x − x 0 ) n + 1 ( n + 1 ) !
R_n(x) = f^{(n+1)}[x_0 + \theta(x - x_0)] \frac{(x - x_0)^{n+1}}{(n+1)!}
R n ( x ) = f ( n + 1 ) [ x 0 + θ ( x − x 0 ) ] ( n + 1 ) ! ( x − x 0 ) n + 1
其中, θ ∈ ( 0 , 1 ) \theta \in (0,1) θ ∈ ( 0 , 1 ) 。
柯西(Cauchy)餘項:
R n ( x ) = f ( n + 1 ) [ x 0 + θ ( x − x 0 ) ] ( x − x 0 ) n + 1 n !
R_n(x) = f^{(n+1)}[x_0 + \theta(x - x_0)] \frac{(x - x_0)^{n+1}}{n!}
R n ( x ) = f ( n + 1 ) [ x 0 + θ ( x − x 0 ) ] n ! ( x − x 0 ) n + 1
其中, θ ∈ ( 0 , 1 ) \theta \in(0,1) θ ∈ ( 0 , 1 ) 。
積分餘項
R n ( x ) = ( − 1 ) n n ! ∫ a x ( t − x ) n f ( n + 1 ) ( t ) d t
R_n(x) = \frac{(-1)^n}{n!} \int_a^x(t-x)^nf^{(n+1)}(t) dt
R n ( x ) = n ! ( − 1 ) n ∫ a x ( t − x ) n f ( n + 1 ) ( t ) d t
其中,以上諸多餘項事實上很多是等價的。
泰勒級數
按照上述泰勒公式,如果f(x)在x0處無限可導,那麼泰勒公式則變爲
f ( x ) = ∑ n = 0 ∞ f ( n ) n ! ( x − x 0 ) n + R ∞ f(x) = \sum_{n=0}^\infty \frac{f^{(n)}}{n!}(x-x_0)^n + R_{\infty} f ( x ) = n = 0 ∑ ∞ n ! f ( n ) ( x − x 0 ) n + R ∞
其中冪級數(Power Series)
∑ n = 0 ∞ f ( n ) n ! ( x − x 0 ) n \sum_{n=0}^\infty \frac{f^{(n)}}{n!}(x-x_0)^n n = 0 ∑ ∞ n ! f ( n ) ( x − x 0 ) n
稱爲 f ( x ) f(x) f ( x ) 在點 x 0 x_0 x 0 處的泰勒級數。
算法原理:用高斯-牛頓迭代法,計算非線性方程組中雅克比矩陣的求解。
非線性最小二乘擬合
TODO:完善公式的推導過程
假設向量a a a 的參數 q q q 與 p ( p ≥ q ) p(p \ge q) p ( p ≥ q ) 的在 X X X 中的測量有關,
X = F ( a ⃗ ^ ) + e ⃗ (1)
X = F(\hat{\vec{a}}) + \vec{e} \tag{1}
X = F ( a ^ ) + e ( 1 )
其中,F F F 是 a a a 的非線性連續函數,e e e 表示誤差的零平均值。
針對 a a a ,給定的 X X X 的非線性最小二乘估計必須最小化性能指標爲:
δ 0 2 = [ X − F ( a ⃗ ^ ) ] T [ X − F ( a ⃗ ^ ) ] (2)
\delta_0^2 = [X-F(\hat{\vec{a}})]^T[X-F(\hat{\vec{a}})] \tag{2}
δ 0 2 = [ X − F ( a ^ ) ] T [ X − F ( a ^ ) ] ( 2 )
爲了方便起見,將權重矩陣(weight matrix)(或噪聲協方差矩陣(noise covariance matrix))選用單位矩陣(單位矩陣是一個主對角線元素都爲 1 的方陣);
根據高斯-牛頓迭代,將初始值設置爲a 0 ⃗ \vec {a_0} a 0 ,步長參數設置爲 λ \lambda λ 則
∂ F ∂ a ⃗ ∣ a k Δ a ⃗ = X − F ( a ⃗ ) (3)
\frac{\partial{F}}{\partial{\vec{a}}}|_{a_k} \Delta{\vec{a}} = X - F(\vec{a}) \tag{3}
∂ a ∂ F ∣ a k Δ a = X − F ( a ) ( 3 )
a ⃗ k + 1 = a ⃗ k + λ Δ a ⃗ (4)
\vec{a}_{k+1} = \vec{a}_k + \lambda \Delta{\vec{a}} \tag{4}
a k + 1 = a k + λ Δ a ( 4 )
其中,等式(3)的雅克比矩陣,如下所示:
J i j = ∂ F i ∂ a j (5)
J_{ij} = \frac{\partial{F_i}}{\partial{a_j}} \tag{5}
J i j = ∂ a j ∂ F i ( 5 )
對於上述類型的數值解,必須提供向量 F ⃗ \vec{F} F 的函數值和雅克比矩陣 J J J 。在提供了向量 F ⃗ \vec{F} F 的函數值和雅克比矩陣 J J J 後,可使用 S V D SVD S V D 對雅克比矩陣進行分解。
∂ F ⃗ ∂ a ⃗ ∣ a k = U W V T
\frac{\partial\vec{F}}{\partial\vec{a}} |_{a_k} = UWV^T
∂ a ∂ F ∣ a k = U W V T
U T U = V T V = I , W = ( d i a g ( w 1 , w 2 , ⋯ , w q ) ) (6)
U^TU = V^TV = I,W = (diag(w_1, w_2, \cdots, w_q)) \tag{6}
U T U = V T V = I , W = ( d i a g ( w 1 , w 2 , ⋯ , w q ) ) ( 6 )
根據上述公式,完成迭代後,即可得到公式(2)中的δ 2 \delta^2 δ 2 。
協方差矩陣的公式,如下所示:
C o v ( a ⃗ ) = ( J T J ) − 1 = ( V W U T U W V T ) − 1 = V W − 2 V T
Cov(\vec{a}) = (J^TJ)^{-1} = (VWU^TUWV^T)^{-1} = VW^{-2}V^T
C o v ( a ) = ( J T J ) − 1 = ( V W U T U W V T ) − 1 = V W − 2 V T
C o v ( a j , a k ) = ∑ i = 1 q ( V j i V k i w i 2 ) , i = 1 , 2 , ⋯ , q . (7)
Cov(a_j, a_k) = \sum_{i=1}^q\left( \frac{V_{ji}V_{ki}}{w_i^2}\right),i=1, 2, \cdots, q.\tag{7}
C o v ( a j , a k ) = i = 1 ∑ q ( w i 2 V j i V k i ) , i = 1 , 2 , ⋯ , q . ( 7 )
因此,預估參數的協方差可以寫成以下形式:
δ 2 ( a j ) = δ 2 p − q C o v ( a j , a j ) , j = 1 , 2 , ⋯ , q (8)
\delta^2(a_j) = \frac{\delta^2}{p-q} Cov(a_j, a_j), j = 1, 2, \cdots, q \tag{8}
δ 2 ( a j ) = p − q δ 2 C o v ( a j , a j ) , j = 1 , 2 , ⋯ , q ( 8 )
相關係數爲:
ρ ( a j , a k ) = C o v ( a j , a k ) C o v ( a j , a j ) C o v ( a k , a k ) , j = 1 , 2 , ⋯ , q , k = 1 , 2 , ⋯ , q .
\rho(a_j,a_k) = \frac{Cov(a_j, a_k)}{\sqrt{Cov(a_j, a_j)Cov(a_k, a_k)}}, j=1, 2, \cdots, q, k = 1, 2, \cdots, q.
ρ ( a j , a k ) = C o v ( a j , a j ) C o v ( a k , a k ) C o v ( a j , a k ) , j = 1 , 2 , ⋯ , q , k = 1 , 2 , ⋯ , q .
圓的幾何擬合
TODO: 完成公式的理論推導過程
圓心在X c X_c X c 處, 且半徑爲R R R 圓或球,在 n ( n ≥ 2 ) n(n \ge 2) n ( n ≥ 2 ) 維空間,可表示爲以下形式:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-v0NUhZ5W-1584789138219)(圖2.png)]
根據公式,R 2 = ∣ ∣ X − X c ∣ ∣ 2 R^2 = ||X - X_c||^2 R 2 = ∣ ∣ X − X c ∣ ∣ 2 ,其中,X X X 爲擬合圓上的點,則點 X i ( ≠ X c ) X_i(\ne X_c) X i ( = X c ) 對應的最近的點的座標:
X i ′ = X c + R X i − X c ∣ ∣ X i − X c ∣ ∣ ( i = 1 , 2 , ⋯ , m ) (9) X_i' = X_c + R\frac{X_i - X_c}{||X_i - X_c||} \quad (i = 1, 2, \cdots, m) \tag{9} X i ′ = X c + R ∣ ∣ X i − X c ∣ ∣ X i − X c ( i = 1 , 2 , ⋯ , m ) ( 9 )
X i ′ X_i' X i ′ 的誤差距離的正交向量爲:
X i ′ ′ = X i − X i ′ = [ ∣ ∣ X i − X c ∣ ∣ − R ] X i − X c ∣ ∣ X i − X c ∣ ∣ (10)
X_i'' = X_i - X_i' = [||X_i - X_c|| -R]\frac{X_i - X_c}{||X_i-X_c||} \tag{10}
X i ′ ′ = X i − X i ′ = [ ∣ ∣ X i − X c ∣ ∣ − R ] ∣ ∣ X i − X c ∣ ∣ X i − X c ( 1 0 )
根據公式(9),可以推導出,雅克比矩陣 J J J 的高斯-牛頓迭代公式爲:
J X i ′ , a ⃗ = ∂ ∂ a ⃗ [ X c + R X i − X c ∣ ∣ X i − X c ∣ ∣ ]
J_{X_i', \vec{a}} = \frac{\partial}{\partial {\vec{a}}} \left[ X_c + R\frac{X_i - X_c}{||X_i - X_c||}\right]
J X i ′ , a = ∂ a ∂ [ X c + R ∣ ∣ X i − X c ∣ ∣ X i − X c ]
= ∂ X c ∂ a ⃗ + X i − X c ∣ ∣ X i − X c ∣ ∣ ∂ R ∂ a ⃗ − R ∣ ∣ X i − X c ∣ ∣
= \frac{\partial {X_c}}{\partial\vec{a}} + \frac{X_i - X_c}{||X_i - X_c||}\frac{\partial R}{\partial {\vec {a}}} - \frac{R}{||X_i - X_c||}
= ∂ a ∂ X c + ∣ ∣ X i − X c ∣ ∣ X i − X c ∂ a ∂ R − ∣ ∣ X i − X c ∣ ∣ R
× [ I − ( X i − X c ) ( X i − X c ) T ∣ ∣ X i − X c ∣ ∣ 2 ] ∂ X c ∂ a ⃗
\times \left[ I - \frac{(X_i - X_c)(X_i - X_c)^T}{||X_i - X_c||^2} \right] \frac{\partial {X_c}}{\partial {\vec{a}}}
× [ I − ∣ ∣ X i − X c ∣ ∣ 2 ( X i − X c ) ( X i − X c ) T ] ∂ a ∂ X c
注:論文中,以球體的擬合爲例:
我們定義參數向量 a ⃗ \vec{a} a , 則:
a ⃗ T = ( R , X c T ) = ( R , X c , Y c , Z c ) , (12)
\vec{a}^T = (R, X_c^T) = (R, X_c, Y_c, Z_c), \tag{12}
a T = ( R , X c T ) = ( R , X c , Y c , Z c ) , ( 1 2 )
對上式中的 R R R 與 X c X_c X c 求偏導數,得:
∂ R ∂ a ⃗ = ( 1 ∣ 0 ⃗ T ) 和 ∂ X c ∂ a ⃗ = ( 0 ∣ I ⃗ ) (13)
\frac{\partial R}{\partial \vec{a}} = (1|\vec{0}^T) 和 \frac{\partial{X_c}}{\partial{\vec{a}}} = (0|\vec{I}) \tag{13}
∂ a ∂ R = ( 1 ∣ 0 T ) 和 ∂ a ∂ X c = ( 0 ∣ I ) ( 1 3 )
根據,雅克比矩陣 J X i ′ , a J_{X_i', a} J X i ′ , a 和誤差距離向量 X i ′ ′ X_i'' X i ′ ′ ,我們可以構建出 m m m 個點在 n n n 維空間中的線性關係:p = m ⋅ n p = m \cdot{n} p = m ⋅ n , 因爲是球體的擬合,所以,( n = 3 , p = 3 m , q = 4 ) (n = 3, p = 3m, q = 4) ( n = 3 , p = 3 m , q = 4 ) ,因此,該線性等式,如下所示:
( J X 1 ′ , R J X 1 ′ , X c J X 1 ′ , Y c J X 1 ′ , Z c J Y 1 ′ , R J Y 1 ′ , X c J Y 1 ′ , Y c J Y 1 ′ , Z c J Z 1 ′ , R J Z 1 ′ , X c J Z 1 ′ , Y c J Z 1 ′ , Z c ⋮ ⋮ ⋮ ⋮ J X m ′ , R J X m ′ , X c J X m ′ , Y c J X m ′ , Z c J Y m ′ , R J Y m ′ , X c J Y m ′ , Y c J Y m ′ , Z c J Z m ′ , R J Z m ′ , X c J Z m ′ , Y c J Z m ′ , Z c ) ( Δ R Δ X c Δ Y c Δ Z c ) = ( X 1 ′ ′ Y 1 ′ ′ Z 1 ′ ′ ⋮ X m ′ ′ Y m ′ ′ Z m ′ ′ ) (14)
\left(
\begin{matrix}
J_{X_1', R} & J_{X_1', X_c} & J_{X_1', Y_c} & J_{X_1', Z_c} \\
J_{Y_1', R} & J_{Y_1', X_c} & J_{Y_1', Y_c} & J_{Y_1', Z_c} \\
J_{Z_1', R} & J_{Z_1', X_c} & J_{Z_1', Y_c} & J_{Z_1', Z_c} \\
\vdots & \vdots & \vdots & \vdots \\
J_{X_m', R} & J_{X_m', X_c} & J_{X_m', Y_c} & J_{X_m', Z_c} \\
J_{Y_m', R} & J_{Y_m', X_c} & J_{Y_m', Y_c} & J_{Y_m', Z_c} \\
J_{Z_m', R} & J_{Z_m', X_c} & J_{Z_m', Y_c} & J_{Z_m', Z_c}
\end{matrix}
\right)
\left(
\begin{matrix}
\Delta R \\
\Delta X_c \\
\Delta Y_c \\
\Delta Z_c
\end{matrix}
\right) = \left(
\begin{matrix}
X_1'' \\
Y_1'' \\
Z_1'' \\
\vdots \\
X_m'' \\
Y_m'' \\
Z_m''
\end{matrix}
\right) \tag{14}
⎝ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ J X 1 ′ , R J Y 1 ′ , R J Z 1 ′ , R ⋮ J X m ′ , R J Y m ′ , R J Z m ′ , R J X 1 ′ , X c J Y 1 ′ , X c J Z 1 ′ , X c ⋮ J X m ′ , X c J Y m ′ , X c J Z m ′ , X c J X 1 ′ , Y c J Y 1 ′ , Y c J Z 1 ′ , Y c ⋮ J X m ′ , Y c J Y m ′ , Y c J Z m ′ , Y c J X 1 ′ , Z c J Y 1 ′ , Z c J Z 1 ′ , Z c ⋮ J X m ′ , Z c J Y m ′ , Z c J Z m ′ , Z c ⎠ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎞ ⎝ ⎜ ⎜ ⎛ Δ R Δ X c Δ Y c Δ Z c ⎠ ⎟ ⎟ ⎞ = ⎝ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎛ X 1 ′ ′ Y 1 ′ ′ Z 1 ′ ′ ⋮ X m ′ ′ Y m ′ ′ Z m ′ ′ ⎠ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎞ ( 1 4 )
上述過程中,高斯-牛頓迭代初始參數向量,可以由代數擬合圓提供,也可以通過重心和RMS(Root Mean Square) 獲取,計算公式如下所示:
X c = X ‾ = 1 m ∑ i = 1 m X i , R = 1 m ∑ i = 1 m ∣ X i − X ‾ ∣ 2 (15)
X_c = \overline{X} = \frac{1}{m}\sum_{i=1}^m X_i, R = \sqrt{\frac{1}{m}\sum_{i=1}^m|X_i - \overline{X}|^2} \tag{15}
X c = X = m 1 i = 1 ∑ m X i , R = m 1 i = 1 ∑ m ∣ X i − X ∣ 2 ( 1 5 )
RANSAC (Random Sample Consensus)擬合
隨機抽樣一致算法 (RANdom SAmple Consensus,RANSAC),採用迭代的方式從一組包含離羣的被觀測數據中估算出數學模型的參數。RANSAC算法假設數據中包含正確數據和異常數據(或稱爲噪聲)。正確數據記爲內點 (inliers),異常數據記爲外點 (outliers)。同時RANSAC也假設,給定一組正確的數據,存在可以計算出符合這些數據的模型參數的方法。該算法核心思想 就是隨機性和假設性 ,隨機性是根據正確數據出現概率去隨機選取抽樣數據,根據大數定律 ,隨機性模擬可以近似得到正確結果。假設性 是假設選取出的抽樣數據都是正確數據,然後用這些正確數據通過問題滿足的模型,去計算其他點,然後對這次結果進行一個評分。
RANSAC算法被廣泛應用在計算機視覺領域和數學領域,例如直線擬合、平面擬合、計算圖像或點雲間的變換矩陣、計算基礎矩陣等方面,使用的非常多。
RANSAC的基本假設 是:
(1)數據由“局內點”組成,例如:數據的分佈可以用一些模型參數來解釋;
(2)“局外點”是不能適應該模型的數據;
(3)除此之外的數據屬於噪聲。
局外點產生的原因有:噪聲的極值;錯誤的測量方法;對數據的錯誤假設。
RANSAC 算法的流程
RANSAC 的算法流程,如下所述:
隨機地從數據集 S S S 中,選取 s s s 個數據點,一般取 s s s 剛好能夠組成一個最小的子集,以 s s s 的數據點構成待求模型,比如直線擬合的實驗中,最小的子集就是兩個點,因爲,只要取兩個點就可以構成一條直線。
根據上一步得到模型,我們可以遍歷 S S S 集合中的每一個數據點,判斷它們是否滿足這個模型,也就是說,是否在距離閾值 t t t 內。如果在,則這個點就是內點,將所有這些內點集合,稱爲一致集 S i S_i S i 。
如果 S i S_i S i 的大小(比如,內點的數目) 大於某個閾值 T T T ,就用 S i S_i S i 中所有點重新估計模型並結束 。
如果 S i S_i S i 小於閾值 T T T , 就選擇一個新的最小子集 s s s ,並重覆上述過程。
經過 N N N 次實驗選擇一個最大一致集 S i S_i S i , 並用 S i S_i S i 的所有點重新估計模型。
RANSAC 與最小二乘的區別
最小二乘法儘量去適應包括局外點的內在的所有點。相反,RANSAC 能得出一個僅僅用局內點計算出的模型,並且概率還足夠高。但是,RANSAC 並不能保證結果一定正確,爲了保證算法有足夠高的合理概率,必須小心的選擇算法的參數(參數配置)。經實驗驗證,對於包含 80% 誤差的數據集,RANSAC 的效果,遠優於直接的最小二乘法。
驗證思路
RANSAC算法的輸入是一組觀測數據,一個可以解釋或者適應於觀測數據的參數化模型,一些可信的參數。RANSAC通過反覆選擇數據中的一組隨機子集 來達成目標。被選取的子集被假設爲局內點,並用下述方法進行驗證:
1.有一個模型適應於假設的局內點,即所有的未知參數都能從假設的局內點計算得出。
2.用1中得到的模型去測試所有的其它數據,如果某個點適用於估計的模型,認爲它也是局內點。
3.如果有足夠多的點被歸類爲假設的局內點,那麼估計的模型就足夠合理。
4.然後,用所有假設的局內點去重新估計模型,因爲它僅僅被初始的假設局內點估計過。
5.最後,通過估計局內點與模型的錯誤率來評估模型。
這個過程被重複執行固定的次數,每次產生的模型要麼因爲局內點太少而被捨棄,要麼因爲比現有的模型更好而被選用。
參數選擇
根據特定的問題和數據集通過實驗來確定參數 t t t 和 d d d 。然而參數 k k k (迭代次數)可以從理論結果推斷。當估計模型參數時,用 p p p 表示一些迭代過程中從數據集內隨機選取出的點均爲局內點的概率;此時,結果模型很可能有用,因此, p p p 也表徵了算法產生有用結果的概率。用 w表示每次從數據集中選取一個局內點的概率,如下式所示:
w = 局內點的數目 / 數據集的數目
通常情況下,我們事先並不知道w的值,但是可以給出一些魯棒的值。假設估計模型需要選定 n n n 個點,w n w^n w n 是所有 n n n 個點均爲局內點的概率;1 − w n 1 − w^n 1 − w n 是 n n n 個點中至少有一個點爲局外點的概率,此時表明我們從數據集中估計出了一個不好的模型。 ( 1 − w n ) k (1 − w^n)^k ( 1 − w n ) k 表示算法永遠都不會選擇到 n n n 個點均爲局內點的概率,它和 1 − p 1-p 1 − p 相同。因此,
1 − p = ( 1 − w n ) k 1 − p = (1 − w^n)^k 1 − p = ( 1 − w n ) k
我們對上式的兩邊取對數,得出
k = log ( 1 − p ) l o g ( 1 − w n ) k = \frac{\log(1-p)}{log(1 - w^n)} k = l o g ( 1 − w n ) log ( 1 − p )
值得注意的是,這個結果假設 n n n 個點都是獨立選擇 的;也就是說,某個點被選定之後,它可能會被後續的迭代過程重複選定到。這種方法通常都不合理,由此推導出的k值被看作是選取不重複點的上限。例如,要從數據集尋找適合的直線,RANSAC算法通常在每次迭代時選取2個點,計算通過這兩點的直線 maybe_model ,要求這兩點必須唯一。
爲了得到更可信的參數,標準偏差或它的乘積可以被加到 k k k 上。k k k 的標準偏差定義爲:
S D ( k ) = 1 − w n w n
SD(k) = \frac{\sqrt{1-w^n}}{w^n}
S D ( k ) = w n 1 − w n
RANSAC 的數學原理
RANSAC的數學原理如下:對於數量爲N的樣本集,其中正確數量爲 M M M ,則每一次獲取到正確數據的概率 p = M N p=\frac{M}{N} p = N M ,計算模型參數需要 K K K 個數據,則一次性得到 K K K 個正確數據的概率爲 p K p^K p K (概率很低);反之至少存在一個錯誤數據的概率爲( 1 − p K ) (1-p^K) ( 1 − p K ) 。若重複抽取 L L L 次,則 L L L 組數據中都存在錯誤數據的概率爲( 1 − p K ) L (1-p^K)^L ( 1 − p K ) L ,注意這裏當L L L 足夠大時,這個概率就會變得很小,也就意味着L L L 組數據中至少有一組正確數據的概率爲1 − ( 1 − p K ) L 1-(1-p^K)^L 1 − ( 1 − p K ) L ,會變得足夠大。直觀解釋就是抽取次數越多,抽到一組正確數據的概率就會越大。
一般RANSAC的實現代碼中有一個輸入參數稱爲置信度 P P P ,P = 1 − ( 1 − p K ) L P=1-(1-p^K)^L P = 1 − ( 1 − p K ) L ,我們可以通過P反算得到抽取次數$, , , L=\frac{\log(1-P)}{\log(1-p^K)}$。
優點與缺點
優點
RANSAC 的優點是它能魯棒的估計出模型參數,對噪聲具有一定容忍度;例如,它能從包含大量局外點的數據集中估計出高精度的參數。
缺點
RANSAC 計算參數的迭代次數沒有上限;如果設置迭代次數的上限,得到的結果可能不是最優的結果,甚至可能得到錯誤的結果。
RANSAC只有一定的概率得到可信的模型,概率與迭代次數成正比。
RANSAC的另一個缺點是它要求設置跟問題相關的閥值。
RANSAC只能從特定的數據集中估計出一個模型,如果存在兩個(或多個)模型,RANSAC不能找到別的模型。
應用
計算機視覺中RANSAC經常用於多視圖間計算基本矩陣或者單應矩陣的計算。如由於鏡頭的限制,往往需要多張照片才能拍下那種巨幅的風景。在多幅圖像合成時,事先會在待合成的圖片中提取一些關鍵的特徵點。計算機視覺的研究表明,不同視角下物體往往可以通過一個透視矩(3X3或2X2)陣的變換而得到。RANSAC被用於擬合這個模型的參數(矩陣各行列的值),由此便可識別出不同照片中的同一物體。$$
K K K 個正確數據的概率爲 p K p^K p K (概率很低);反之至少存在一個錯誤數據的概率爲( 1 − p K ) (1-p^K) ( 1 − p K ) 。若重複抽取 L L L 次,則 L L L 組數據中都存在錯誤數據的概率爲( 1 − p K ) L (1-p^K)^L ( 1 − p K ) L ,注意這裏當L L L 足夠大時,這個概率就會變得很小,也就意味着L L L 組數據中至少有一組正確數據的概率爲1 − ( 1 − p K ) L 1-(1-p^K)^L 1 − ( 1 − p K ) L ,會變得足夠大。直觀解釋就是抽取次數越多,抽到一組正確數據的概率就會越大。
一般RANSAC的實現代碼中有一個輸入參數稱爲置信度 P P P ,P = 1 − ( 1 − p K ) L P=1-(1-p^K)^L P = 1 − ( 1 − p K ) L ,我們可以通過P反算得到抽取次數$, , , L=\frac{\log(1-P)}{\log(1-p^K)}$。
優點與缺點
優點
RANSAC 的優點是它能魯棒的估計出模型參數,對噪聲具有一定容忍度;例如,它能從包含大量局外點的數據集中估計出高精度的參數。
缺點
RANSAC 計算參數的迭代次數沒有上限;如果設置迭代次數的上限,得到的結果可能不是最優的結果,甚至可能得到錯誤的結果。
RANSAC只有一定的概率得到可信的模型,概率與迭代次數成正比。
RANSAC的另一個缺點是它要求設置跟問題相關的閥值。
RANSAC只能從特定的數據集中估計出一個模型,如果存在兩個(或多個)模型,RANSAC不能找到別的模型。
應用
計算機視覺中RANSAC經常用於多視圖間計算基本矩陣或者單應矩陣的計算。如由於鏡頭的限制,往往需要多張照片才能拍下那種巨幅的風景。在多幅圖像合成時,事先會在待合成的圖片中提取一些關鍵的特徵點。計算機視覺的研究表明,不同視角下物體往往可以通過一個透視矩(3X3或2X2)陣的變換而得到。RANSAC被用於擬合這個模型的參數(矩陣各行列的值),由此便可識別出不同照片中的同一物體。$$