隨機抽樣一致

随机抽样一致算法（RANdom SAmple Consensus，RANSAC）是一种迭代方法，用于从一组包含异常值的观测数据中估计数学模型的参数，也可以被解释为一种异常值检测方法。RANSAC是一個非确定性算法，它會產生一個在一定概率下合理的結果，而迭代的次数增加会使这一概率上升。此RANSAC算法最初在1981年最初由Fischler和Bolles首次在国际斯坦福研究所上发表。

RANSAC的基本假設是
「內群」(inlier,  似乎譯為內點群更加妥當，即正常數據，正確數據)數據可以通過幾組模型的參數來敘述其分佈，而｢離群」(outlier,似乎譯為外點群更加妥當，異常數​​據)數據則是不適合模型化的數據。 
數據會受雜訊影響，雜訊指的是離群，例如從極端的雜訊或錯誤解釋有關數據的測量或不正確的假設。
RANSAC假定，給定一組（通常很小）的內點群，存在一個程序，這個程序可以估算最佳解釋或最適用於這一數據模型的參數。 

範例
這裡用一個簡單的例子來說明，在一組數據點中找到一條最適合的線。假設，此有一組集合包含了內點群以及外點群，其中內點群包含可以被擬合到線段上的點，而外點群則是無法被擬合的點。如果我們用簡單的最小二乘法來找此線，我們將無法得到一條適合於內點群的直線，因為最小二乘法會受外點群影響而影響其結果。而用RANSAC，可以只由內點群來計算出模型，而且概率還夠高。然而，RANSAC無法保證結果一定最好，所以必須小心選擇參數，使其能有足夠的概率。

概述
在數據中隨機選擇若干個點設定為內點群
計算拟合內點群的模型
把其它剛才沒選到的點帶入剛才建立的模型中，計算是否屬於內點群
記下內點群數量
重複以上步驟
比較哪次計算中內點群數量最多，內點群最多的那次所建的模型就是我們所要求的解

這裡有幾個問題
一開始的時候我們要隨機選擇多少點（n）
以及要重複做多少次（k）

參數決定
假設每個點是真正內點群的機率是 ，则：

 = 真正內點群的數目 / 數據總數

通常我們不知道  是多少， 是所選擇的  個點都是內點群的機率， 是所選擇的  個點至少有一個不是內點群的機率， 是表示重複  次都沒有全部的  個點都是內點群的機率，假設算法跑  次以後成功的機率是 ，那麼：

所以如果希望成功機率高，，
當  不變時， 越大， 越大，
當  不變時， 越大，所需的  就越大，
通常  未知，所以  選小一點比較好。

應用
RANSAC算法经常用在计算机视觉领域，例如，对于一对立体相机，同时求解其和估计它们之间的基础矩阵。

参考资料





外部链接
 RANSAC Toolbox for MATLAB .  A research (and didactic) oriented toolbox to explore the RANSAC algorithm in MATLAB.  It is highly configurable and contains the routines to solve a few relevant estimation problems.
 Implementation in C++  as a generic template.
 RANSAC for Dummies  A simple tutorial with many examples that uses the RANSAC Toolbox for MATLAB.
 25 Years of RANSAC Workshop 
  Source code for RANSAC in MATLAB

Category:計算機視覺
Category:統計演算法
Category:穩健統計學