最小中值法(LMedS)
LMedS的作法很簡單,就是從樣本中隨機抽出N個樣本子集,使用最大似然(一般是最小二乘)對每一個子集計算模型參數和該模型的誤差,記錄該模型參數及子集中全部樣本中誤差居中的那個樣本的誤差(即Med誤差),最後選取N個樣本子集中Med誤差最小的所對應的模型參數做爲咱們要估計的模型參數。算法
最小中值法可用數學表達簡練的表達爲:dom
θ=argθminmedi∈Nri(xi,θ)θ=argθminmedi∈Nri(xi,θ)ide
θθ爲擬合模型參數,ri(xi,θ)ri(xi,θ)是模型第i個點的殘留偏差,N是咱們隨機抽出的樣本子集,medmed爲中值操做。函數
M估計(M-estimators)
對於含有外點的數據,若是對全部樣本點使用同樣的權重,在擬合模型時外點對模型會有較大的干擾,由此爲出發點想到,若是下降外點的權重,則能夠下降外點對模型的影響,這也就是M估計的一個思想。但問題是咱們怎麼知道哪些是外點呢,M估計中將與所估計模型誤差大的點視爲外點,下降與模型誤差越大的點的權重。atom
一個M估計經過最小化下面的表達式來估計參數:spa
θ=argθ∑iρ(ri(xi,θ);σ)θ=argθ∑iρ(ri(xi,θ);σ)orm
通常的爲了下降誤差大的點的影響,ρ(μ,σ)ρ(μ,σ)函數隨着μμ的增長變平。經常使用的選擇是:xml
ρ(μ,σ)=μ2σ2+μ2ρ(μ,σ)=μ2σ2+μ2htm
σσ參數是控制函數變平點的變量,下圖是當σ2=0.1,1,10σ2=0.1,1,10時畫的rho(x,σ)=x2σ2+x2rho(x,σ)=x2σ2+x2
經過引入ρρ,M估計能夠保證外點做用被衰減的程度要比它們產平生方偏差的程度要高。
從M估計的數學表達能夠看出,問題是非線性的,必須迭代求解,下面是具體求解算法:
算法1 用M估計擬合機率模型參數
對於ss從1到kk
均勻隨機抽取rr個不一樣點組成樣本子集
用最大似然(一般是最小二乘)對抽取的點集進行擬合得到θ0sθs0
用θn−1sθsn−1估計σn−1sσsn−1,一個流行的估計式是:σn−1=1.4826mediani|rn−1i;θn−1|σn−1=1.4826mediani|rin−1;θn−1|
直到收斂(|θns−θn−1s||θsn−θsn−1|很是小)
用最小化方法經過θn−1s,σn−1sθsn−1,σsn−1獲得θnsθsn
計算σnsσsn
End
End
使用殘差的中值做爲準則得到這個集合的最好擬合,用最好擬合的參數做爲模型的參數
隨機採樣一致算法(RANSAC)
M估計計算複雜性較高。另一種最經常使用的方法是隨機採樣一致算法(RANSAC,Random Sample Consensus)。它的基本思路是隨機選擇一個小的數據點子集,而後對其進行擬合,查看有多少其餘點匹配到擬合的模型上,迭代這個過程直至有較大的機率找到咱們想要擬合的模型。
咱們先看下RANSAC的算法流程,而後對其中的步驟進行詳細闡述。
算法2 用隨機採樣一致(RANSAC)擬合機率模型參數
肯定:
nn——所須要的最少點數
kk——須要的迭代次數
dd——判斷一個點是否擬合的很好的閾值,也稱內外點距離閾值
tt——判斷一個模型是否擬合的很好所須要的鄰近點數目,也稱一致性集合大小閾值
直到kk次迭代完成
從數據中均勻的採樣nn個點
對這nn個點進行模型擬合
對於採樣外的每一個點
用dd比較點到擬合模型的距離,若是距離小於dd,則認爲點是靠近的
End
若是有tt個或者更多的點靠近模型,則認爲該擬合是個好的擬合,從新用這些點和靠近的點擬合模型。
End
使用擬合偏差最小的所對應的參數做爲該模型的估計參數。
RANSAC的難點是n,k,d,tn,k,d,t這幾個參數的肯定,下面就怎麼肯定參數作簡單的討論。
1、最少點數nn的肯定
相對比較容易,根據要擬合的模型肯定。例,若是擬合一天直線,最少須要兩個點;對於圖片配準,擬合透射變換矩陣最少須要4組點對,擬合仿射變換,最少須要3組點對。
2、迭代次數kk的肯定
令ww爲數據是真實數學模型內點的機率,則一次估計中全部nn個點(肯定模型參數的最小點數)都爲內點的機率爲wnwn。咱們須要保證kk次迭代中至少一次估計中全部數據點都是內點的機率pp較大,則kk須要知足:
1−p=(1−wn)k⇒k=log(1−p)log(1−wn)1−p=(1−wn)k⇒k=log(1−p)log(1−wn)
其中pp取一個較大的值。
3、內外點距離閾值dd的肯定
這個閾值用來判斷數據點是內點或是外點,沒有一個統一的方法,只能經過實驗獲得。
4、一致性集合大小閾值tt的肯定
令數據點集中外點的機率爲yy,咱們須要選擇tt個點使得ytyt很小(好比小於0.05)。yy一般是沒法精確的估計,若是真實模型中內點佔優點,通過隨機採樣後yy通常比(1−w)(1−w)要小,便可由y≤(1−w)y≤(1−w)。
肯定這些參數後就能夠用RANSAC算法估計模型參數了。