这里参与比较的线性参数估计算法有LS、WLS、Ransac LS、LMedS(其实Ransac的使用并不局限于线性模型,LMedS的思想也可以扩展到非线性模型)。由于已经有大量的文献从数学理论上对这些算法做了分析,所以此处只是用实验结果给大家一个直观的印象。
四种参数估计算法的简单描述:
LS既是最小方差,以此作为目标函数求解参数估计值的方法称为最小方差估计,SVD分解是目前解决这一问题的最有效手段。
WLS既是带权重的最小方差,其思想是将每个输入的样本赋予权值,初始时每个样本的权值相等,然后使用所有带权重的样本估计模型的参数,得到参数后,计算每个样本与模型的偏差,再根据偏差决定样本的新权重,偏差越大则权重越小,然后重复模型参数估计与权重更新这个过程,直到样本的带权偏差和收敛为止。
Ransac是一种随机参数估计算法。Ransac LS从样本中随机抽选出一个样本子集,使用LS对这个子集计算模型参数,然后计算所有样本与该模型的偏差,再使用一个预先设定好的阈值与偏差比较,当偏差小于阈值时,该样本点属于模型内样本点(inliers),否则为模型外样本点(outliers),记录下当前的inliers的个数,然后重复这一过程。每一次重复,都记录当前最佳的模型参数,所谓最佳,既是inliers的个数最多,此时对应的inliers个数为best_ninliers。每次迭代的末尾,都会根据期望的误差率、best_ninliers、总样本个数、当前迭代次数,计算一个迭代结束评判因子,据此决定是否迭代结束。迭代结束后,最佳模型参数就是最终的模型参数估计值。
LMedS也是一种随机参数估计算法。LMedS也从样本中随机抽选出一个样本子集,使用LS对子集计算模型参数,然后计算所有样本与该模型的偏差。但是与Ransac LS不同的是,LMedS记录的是所有样本中,偏差值居中的那个样本的偏差,称为Med偏差(这也是LMedS中Med的由来),以及本次计算得到的模型参数。由于这一变化,LMedS不需要预先设定阈值来区分inliers和outliers。重复前面的过程N次,从中N个Med偏差中挑选出最小的一个,其对应的模型参数就是最终的模型参数估计值。其中迭代次数N是由样本集子中样本的个数、期望的模型误差、事先估计的样本中outliers的比例所决定。
四种算法的简单分析:
LS将所有样本参与最后的参数估计计算,不能剔除输入样本中的outliers。这些outliers会给参数估计带来极大的影响,使得估计结果变得很差。
WLS一定程度上可以削弱outliers对整体的影响,但是WLS有可能陷入局部极值,这与梯度下降法有类似之处。
Ransac理论上可以剔除outliers的影响,并得到全局最优的参数估计。但是Ransac有两个问题,首先在每次迭代中都要区分inliers和outlieres,因此需要事先设定阈值,当模型具有明显的物理意义时,这个阈值还比较容易设定,但是若模型比较抽象时,这个阈值就不那么容易设定了,而且固定阈值不适用于样本动态变化的应用;第二个问题是,Ransac的迭代次数是运行期决定的,不能预知迭代的确切次数(当然迭代次数的范围是可以预测的)。
LMedS理论上也可以剔除outliers的影响,并得到全局最优的参数估计,而且客服了Ransac的两个缺点(虽然LMedS也需要实现设定样本中outliers的比例,但这个数字比较容易设定)。但是当outliers在样本中所占比例达到或超过50%时,LMedS就无能为力了!这与LMedS每次迭代记录的是“Med”偏差值有关!
四种算法的实验结果:
我挑选了一种最简单的情况来测试比较这四种算法——直线参数估计。直线模型为:y=-x-1,输入的100个样本点中加入均值为0,方差为2的高斯噪声,并且再加入20%的随机outliers。进行1000次测试,记录每次的参数估计误差和迭代次数。
测试关注的数据为:平均误差、误差方差、平均迭代次数。平均误差反映了参数估计算法的精度,误差方差反映参数估计算法的一致性表现,平均迭代次数反映了参数估计算法的时间消耗。
|
LS |
WLS |
Ransac |
LMedS |
平均误差 |
2.5033 |
1.5799 |
0.5276 |
0.6397 |
误差方差 |
0.2267 |
0.3953 |
0.1081 |
0.1071 |
平均迭代次数 |
1 |
10 |
8 |
7 |
从上表不难看出LS的估计精度最差;WLS的一致性很差,这与其容易陷入局部极值有关;Ransac与LMedS性能相近,选择哪一个,就要根据具体应用来决定了。当outliers小于50%,样本与模型的偏差的物理含义不明确时,LMedS是个不错的选择。
直线参数估计图形显示如下表:
|
|
LS直线参数估计 |
WLS直线参数估计 |
|
|
Ransac LS 直线参数估计 |
LMedS 直线参数估计 |