1.解决问题:
当一组样本数据中含有(较小波动的)正常数据(inliers)和(较大波动的)异常数据(outliers)且异常数据的量还不小于正常数据的量时,用最小二乘法将难以获得期望的直线(即能拟合正常数据的直线),随机抽样一致(RandomSAmple Consensus, RANSAC)算法就可以用来代替最小二乘法算出期望的直线参数。这里为便于讨论局限于直线模型,但RANSAC算法适用任何模型。
如下图所示,RANSAC算法的目的就是从数据集中剔除红色的点,得到一条能拟合蓝色点的直线。
2.算法描述:
S:样本点集
M:数学模型(y=ax+b)
N:计算模型M的参数所需的最少点数
K:算法迭代次数
T:判断一点是否适用于模型M的阀值误差
D:判定模型M是否适用于样本点集S的最少样本点数
(1)从样本点集S中随机抽取一个子样本P(P所含点数不小于N)来计算模型M的参数
(2)将余集S*=S-P中的每个点代入模型M,若所得误差小于设定阀值T则将此点加入P,否则抛弃
(3)若P中点的数量小于设定值D则抛弃模型M,否则用最小二乘法和点集P重新计算模型M的参数和点集P在新模型上的误差E
(4)将(1)~(3)迭代执行K次,每次产生的模型仅当P中点的数量大于D且误差比当前模型的误差小时才替代当前模型,否则抛弃
3.优化策略:
(1)若发现一种足够好的模型(正常点数量达到D且误差足够小)可跳出循环从而加速算法
(2)根据样本点集的特征有约束地随机选取子样本并规定正常点数量达到D且误差足够小就跳出循环从而加速算法
时间: 2024-10-27 11:55:56