python机器学习手写算法系列——RANSAC(随机抽样一致)回归

本文介绍了RANSAC(随机抽样一致)算法,重点在于如何在Python中实现该算法进行一元一次方程的线性回归。通过分析算法原理、Scikit-Learn库的实现及手写代码,文章展示了如何处理含有异常值的数据,并通过不同情况的探索来验证算法效果。
摘要由CSDN通过智能技术生成

本文旨在通过在最简单的一元一次方程中运用RANSAC,编写代码,来学习RANSAC算法。

RANSAC算法

RANSAC[1]算法,全程是Random Sample Consensus(随机抽样一致)。它采用迭代的方式从一组包含outliers的数据中估算出回归模型。RANSAC是一个非确定性算法,因为它是“随机抽样”的。

它原来是计算机视觉的算法,后来被用来做线性回归。

RANSAC回归用最少的数据点训练模型,基本算法总结如下:

  1. 选取的最少的数据点,作为样本。
  2. 用样本和基础回归器训练模型。
  3. 根据 ϵ \epsilon ϵ,选出inliers和outliers
  4. 如果inliers的数量达到了阈值 τ \tau τ,用inliers和基础回归器训练模型
  5. 判断终止条件。达到,退出。否则,返回1。(最多 N N N次)

迭代次数 N N N,表示在 N N N次迭代以后,至少有一次迭代,任意选取的 m m m个点,都是inliers的概率是 p p p(通常为0.99)。如果inliers的比例是 u u u,我们就有以下公式。
1 − p = ( 1 − u m ) N 1-p=(1-u^m)^N 1p=(1um)N
变换后得到:
N = l o g ( 1 − p ) l o g ( 1 − u m ) N = \frac{log(1-p)}{log(1-u^m)} N=log(1um)log(1p)

其实,这里我有个疑问。就算,我选择的两个点都是inliers,也无法保证他们他们组成的直线能够穿过其他的inliers。这个就说到RANSAC的原始用途了

在这里插入图片描述

在原始的RANSAC算法里,所谓的样本,是指两张照片上面的相同点。如果找到了这样的样本,当然就可以确定他们之间的向量了。但是回归不是这么回事。如果我的inliers比例是95%,那么
N = l o g ( 1 − 0.99 ) l o g ( 1 − 0.9 5 2 ) = l o g ( 0.01 ) l o g ( 1 − 0.9025 ) = − 2 l o g ( 0.0975 ) = − 2 − 1.01 = 2 N = \frac{log(1-0.99)}{log(1-0.95^2)} = \frac{log(0.01)}{log(1-0.9025)} = \frac{-2}{log(0.0975)}=\frac{-2}{-1.01}=2 N=log

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

织网者Eric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值