首页 > 其他 > 详细

稳健性回归(RANSAC)

时间:2021-03-01 18:42:43      阅读:94      评论:0      收藏:0      [点我收藏+]

  New Question:

  如何在存在有损数据(异常值或错误)的情况下拟合回归模型?

  Answer:

  scikit-learn提供了3种稳健性回归估计方法:

  1.随机抽样一致性算法(RANSAC)

  2.泰森回归(Theil Sen)

  3.Huber回归

  RANSAC(Random Sample Consensus)算法:

  步骤:

  1)从原始数据中随机选择一些样本作为“内点”;

  2)从1中选择的样本拟合模型;

  3)利用模型计算其他样本的残差,若某个样本残差小于预先设置的阈值t。则将其加入内点,将内点中的样本量扩充;

  4)用扩充后的内点拟合模型,计算均方误差;

  5)重复1-4步,最终选取均方误差最小的模型。

  下图给出了具体方法:

技术分享图片

 

  具体参数:

  base_estimator:用于线性回归模型选择,默认None(LinearRegression())

  min_samples:从原始数据随机选择的最小样本数

  residual_threshold:被归为内点数据的最大残差

  max_trails:随机样本选择的最大迭代次数

  stop_n_inliers:停止迭代的内点数目阈值

  stop_score:停止迭代的得分阈值

  loss:每个样本的损失计算方法,默认为“absolute_loss”(绝对损失),还可选择“squared_loss”(平方和损失)

  属性:

  estimator:返回base_estimator中的最佳拟合模型

  inlier_mask:标记数据是否为内点

  构建模拟数据集利用稳健性回归预测:

import numpy as np
from sklearn import datasets
#模拟数据集
n_samples = 2000
n_outliers = 200

#创建用于一元回归的数据
X,Y,coef = datasets.make_regression(n_samples = n_samples, n_features = 1, n_informative = 1, noise = 20, random_state = 1, coef = True)
#添加噪音数据
X[:n_outliers] = 3+0.5 * np.random.normal(size = (n_outliers , 1))
Y[:n_outliers] = 3+np.random.normal(size=n_outliers)

#应用线性回归和RANSAC做回归
from sklearn.linear_model import LinearRegression , RANSACRegressor
lr = LinearRegression()
lr.fit(X,Y)

RAN = RANSACRegressor()
RAN.fit(X,Y)
inlier = RAN.inlier_mask_
outlier = np.logical_not(inlier)

#回归结果
line_X = np.arange(X.min(),X.max())[:,np.newaxis]
lr_y = lr.predict(line_X)
RAN_Y = RAN.predict(line_X)

#做出线性回归和RANSAC回归的图像
import matplotlib.pyplot as plt
plt.scatter(X[inlier],Y[inlier],color = yellowgreen, marker = ., label = Inliers)
plt.scatter(X[outlier],Y[outlier],color = gold, marker = ., label = Outliers)
plt.plot(line_X,lr_y, color = navy, marker = ., label = Linear regressor)
plt.plot(line_X,RAN_Y,color = cornflowerblue, linewidth = 2, label = RANSACregressor)

  得到结果:

技术分享图片

 

  深蓝色线代表构建的线性回归模型,浅蓝色线构建的是稳健性回归(RANdom SAmple Consensus)模型;

  可以看见,稳健性回归不受黄色数据点(离群点)影响,而线性回归受离群点影响较大。

  

 

 

  

稳健性回归(RANSAC)

原文:https://www.cnblogs.com/colaplus-v/p/14465031.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!