1. 程式人生 > >RANSAC 演算法 與 最小二乘法 區別

RANSAC 演算法 與 最小二乘法 區別

RANSAC 演算法

隨機抽樣一致演算法(random sample consensus,RANSAC),採用迭代的方式從一組包含離群的被觀測資料中估算出數學模型的引數。

演算法簡介:RANSAC演算法的基本假設是樣本中包含正確資料(inliers,可以被模型描述的資料),也包含異常資料(outliers,偏離正常範圍很遠、無法適應數學模型的資料),即資料集中含有噪聲。這些異常資料可能是由於錯誤的測量、錯誤的假設、錯誤的計算等產生的。同時RANSAC也假設,給定一組正確的資料,存在可以計算出符合這些資料的模型引數的方法。

基本思想描述:

①考慮一個最小抽樣集的勢為n的模型(n為初始化模型引數所需的最小樣本數)和一個樣本集P,集合P的樣本數#(P)>n,從P中隨機抽取包含n個樣本的P的子集S初始化模型M;
②餘集SC=P\S中與模型M的誤差小於某一設定閾值t的樣本集以及S構成S*。S*認為是內點集,它們構成S的一致集(Consensus Set);
③若#(S*)≥N,認為得到正確的模型引數,並利用集S*(內點inliers)採用最小二乘等方法重新計算新的模型M*;重新隨機抽取新的S,重複以上過程。
④在完成一定的抽樣次數後,若未找到一致集則演算法失敗,否則選取抽樣後得到的最大一致集判斷內外點,演算法結束。
 

資料分兩種:有效資料(inliers)和無效資料(outliers)。偏差不大的資料稱為有效資料,偏差大的資料是無效資料。如果有效資料佔大多數,無效資料只是少量時,我們可以通過最小二乘法或類似的方法來確定模型的引數和誤差;如果無效資料很多(比如超過了50%的資料都是無效資料),最小二乘法就失效了,我們需要新的演算法

RANSAC的基本假設:

1、”內群”資料可以通過幾組模型的引數來敘述其分別,而“離群”資料則是不適合模型化的資料

2、資料會受噪聲影響,噪聲指的是離群,例如從極端的噪聲或錯誤解釋有關資料的測量或不正確的假設

3、RANSAC假定,給定一組(通常很小)的內群,存在一個程式,這個程式可以估算最佳解釋或最適用於這一資料模型的引數

RANSAC的基本假設:

1、”內群”資料可以通過幾組模型的引數來敘述其分別,而“離群”資料則是不適合模型化的資料

2、資料會受噪聲影響,噪聲指的是離群,例如從極端的噪聲或錯誤解釋有關資料的測量或不正確的假設

3、RANSAC假定,給定一組(通常很小)的內群,存在一個程式,這個程式可以估算最佳解釋或最適用於這一資料模型的引數

概述:

1、在資料中隨機選擇幾個點設定為內群

2、計算適合內群的模型

3、把其他剛才沒有選到的點帶入剛才建立的模型中,計算是否為內群

4、記下內群數量

5、重複以上步驟多次

6、比較哪次計算中內群數量最多,內群最多的那次所建的模型就是我們所要求的解

這裡有幾個問題:

1、一開始的時候我們要隨機選擇多少點

2、以及要重複多少次

優缺點:

RANSAC 演算法的優點是能魯棒的估計模型引數。例如,他能從包含大量局外點的資料集中估計出高精度的引數。

缺點是它計算引數的迭代次數沒有上限,如果設定迭代次數的上限,得到的結果可能不是最優的結果,甚至可能得到錯誤的結果。

RANSAC只有一定的概率得到的可信的模型,概率與迭代次數成正比。另一個缺點是它要求設定跟問題相關的閾值,

RANSAC職能從特定的資料集中估計出一個模型,如果存在兩個(或多個)模型,RANSAC不能找到別的模型
 

 

簡介

 給定兩個點p1與p2的座標,確定這兩點所構成的直線,要求對於輸入的任意點p3,都可以判斷它是否在該直線上。初中解析幾何知識告訴我們,判斷一個點在直線上,只需其與直線上任意兩點點斜率都相同即可。實際操作當中,往往會先根據已知的兩點算出直線的表示式(點斜式、截距式等等),然後通過向量計算即可方便地判斷p3是否在該直線上。 

生產實踐中的資料往往會有一定的偏差。例如我們知道兩個變數X與Y之間呈線性關係,Y=aX+b,我們想確定引數a與b的具體值。通過實驗,可以得到一組X與Y的測試值。雖然理論上兩個未知數的方程只需要兩組值即可確認,但由於系統誤差的原因,任意取兩點算出的a與b的值都不盡相同。我們希望的是,最後計算得出的理論模型與測試值的誤差最小。大學的高等數學課程中,詳細闡述了最小二乘法的思想。通過計算最小均方差關於引數a、b的偏導數為零時的值。事實上,在很多情況下,最小二乘法都是線性迴歸的代名詞。 

遺憾的是,最小二乘法只適合與誤差較小的情況。試想一下這種情況,假使需要從一個噪音較大的資料集中提取模型(比方說只有20%的資料時符合模型的)時,最小二乘法就顯得力不從心了。例如下圖,肉眼可以很輕易地看出一條直線(模式),但演算法卻找錯了。 

RANSAC演算法的輸入是一組觀測資料(往往含有較大的噪聲或無效點),一個用於解釋觀測資料的引數化模型以及一些可信的引數。RANSAC通過反覆選擇資料中的一組隨機子集來達成目標。被選取的子集被假設為局內點,並用下述方法進行驗證: 
 

  • 有一個模型適應於假設的局內點,即所有的未知引數都能從假設的局內點計算得出。
  • 用1中得到的模型去測試所有的其它資料,如果某個點適用於估計的模型,認為它也是局內點。
  • 如果有足夠多的點被歸類為假設的局內點,那麼估計的模型就足夠合理。
  • 然後,用所有假設的局內點去重新估計模型(譬如使用最小二乘法),因為它僅僅被初始的假設局內點估計過。
  • 最後,通過估計局內點與模型的錯誤率來評估模型。
  • 上述過程被重複執行固定的次數,每次產生的模型要麼因為局內點太少而被捨棄,要麼因為比現有的模型更好而被選用。

 整個過程可參考下圖: 

RANSAC演算法經常用於計算機視覺,例如同時求解相關問題與估計立體攝像機的基礎矩陣。 (透視/放射變換)