最小中值法(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算法估计模型参数了。