Random sample consensus (RANSAC) is an iterative method to estimate parameters of a mathematical model from a set of observed data that contains outliers, when outliers are to be accorded no influence on the values of the estimates. Therefore, it also can be interpreted as an outlier detection method. It is a non-deterministic algorithm in the sense that it produces a reasonable result only with a certain probability, with this probability increasing as more iterations are allowed. The algorithm was first published by Fishler and Bolles at SRI International in 1981. They used RANSAC to solve the Location Determination Problem (LDP), where the goal is to determine the points in the space that project onto an image into a set of landmarks with known locations. –wiki
随机采样一致性算法是一种迭代方法,这种方法用于 从一组包含异常值的观测数据中 估计数学模型的参数,此时异常值对估计值没有影响。因此,也可以说它是一种异常值检测方法。从某种意义上说,它是一种非确定性算法,它仅以一定的概率产生合理的结果,该概率会随着迭代次数的增加而增加。这个算法是由Fischler 和 Bolles 在SRIinternational 上首次发表的。他们使用RANSAC来解决位置确定问题(LDP),目标是确定空间中的点,这些点投影到图像上,形成一组具有已知位置的地标。
该算法的一个基本假设是:数据由 ”inliers” 组成(相对于outlier,异常值又叫外点,inlier应该可以叫做内点吧),这些数据的分布可以用一组模型参数来解析,但是模型参数又会受到噪声的影响,还有就是“outlier” (外点) 是不符合模型的数据。
举个简单的例子,假如我们要在二维平面上用一条线来拟合一些点。假设这些点中包含可以近似拟合到一条线的inliers(内点) ,和不能拟合到该线的outliers(外点)。使用简单的最小二乘法来拟合所有数据(包括内点和外点)通常会产生一条拟合不佳的线。拟合不佳的原因是这个模型优先适合于所有的点,包括那些outliers(外点,也就是异常值)。另一方面,RANSAC 试图踢掉那些outliers并找到一个在其计算时仅使用inliers的线性模型。在这个过程中,先从所有的数据中随机采样一些数据,然后再用随机采样得到的数据来拟合模型,最后返回最适合数据子集的模型。由于内点之间比内点和外点混合的数据之间 有更强的线性相关,所以完全由内点组成的随机子集将拟合得到最佳模型。然而,实际上我们无法保证随机采样时得到的子集完全由内点组成,算法成功的概率取决于数据中内点的比例以及几个算法参数的选择。
RANSAC算法是一种通过对观测数据进行随机抽样来估计模型参数的学习技术。对于给定的既包含内点又包含外点的数据集,RANSAC使用了投票方法来寻找最佳拟合结果。数据集中的数据元素用于为一个或多个模型投票。该投票方案的实施基于这样的两个假设:那些noisy 特征不会一致地全部投给任何单个模型;有足够多的特征可以就某一个好的模型达成一致。
RANSAC算法的输入是一组观测数据,一种将某种模型拟合到观测值的方法,以及一些置信参数。RANSAC通过重复以下步骤来实现目标:
-
从原始数据集中随机采样出一个子集,把这个子集叫做hypothetical inliers(假设内点);就是先假设我们随机一抽,抽出来的子集全部都为内点,都可以用模型来表达。
-
用一个模型来拟合这些假设的内点。
-
其它那些没有被随机采样到作为假设内点的数据用来测试步骤2中拟合好的模型,这些用来测试的数据中可以很好地符合步骤2中的估算模型的点被看作是共识集(consensus set)的一部分(是否很好地符合模型要根据模型特定的损失函数来判断)
-
如果有足够多的点被归类为该共识集的一部分,那么说明这个模型很不错。
-
之后,可以通过使用共识集的所有成员对模型进行重新估计进而改进模型。
这个过程重复固定的次数,每次产生一个模型,产生的这个模型,不是因为共识集的点太少而被拒绝,就