简介
在本实验中,我们将演示如何使用 scikit-learn 中的 RANSAC 算法将线性模型稳健地拟合到有缺陷的数据上。普通线性回归器对异常值很敏感,拟合线很容易偏离数据的真实潜在关系。RANSAC 回归器会自动将数据分为内点和外点,并且拟合线仅由识别出的内点确定。我们将使用 scikit-learn 中的 make_regression 数据集生成带有异常值的随机数据,然后将线性模型和 RANSAC 回归器都拟合到该数据上。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
导入库并生成数据
我们将导入必要的库,使用 make_regression 数据集生成随机数据,并向数据中添加异常值。
import numpy as np
from matplotlib import pyplot as plt
from sklearn import linear_model, datasets
## 生成数据
n_samples = 1000
n_outliers = 50
X, y, coef = datasets.make_regression(
n_samples=n_samples,
n_features=1,
n_informative=1,
noise=10,
coef=True,
random_state=0,
)
## 添加异常值数据
np.random.seed(0)
X[:n_outliers] = 3 + 0.5 * np.random.normal(size=(n_outliers, 1))
y[:n_outliers] = -3 + 10 * np.random.normal(size=n_outliers)
拟合线性模型
我们将使用 scikit-learn 的 LinearRegression 类对数据拟合一个线性模型。
## 使用所有数据拟合直线
lr = linear_model.LinearRegression()
lr.fit(X, y)
拟合 RANSAC 回归器
我们将使用 scikit-learn 的 RANSACRegressor 类对数据拟合一个 RANSAC 回归器。
## 使用 RANSAC 算法稳健地拟合线性模型
ransac = linear_model.RANSACRegressor()
ransac.fit(X, y)
内点掩码 = ransac.inlier_mask_
外点掩码 = np.logical_not(内点掩码)
预测估计模型的数据
我们将预测线性模型和 RANSAC 回归器的数据,并比较它们的结果。
## 预测估计模型的数据
line_X = np.arange(X.min(), X.max())[:, np.newaxis]
line_y = lr.predict(line_X)
line_y_ransac = ransac.predict(line_X)
比较估计系数
我们将比较真实模型、线性模型和 RANSAC 回归器的估计系数。
## 比较估计系数
print("估计系数 (真实、线性回归、RANSAC):")
print(coef, lr.coef_, ransac.estimator_.coef_)
可视化结果
我们将绘制数据以及线性模型和 RANSAC 回归器的拟合线。
## 可视化结果
lw = 2
plt.scatter(
X[内点掩码], y[内点掩码], color="yellowgreen", marker=".", label="内点"
)
plt.scatter(
X[外点掩码], y[外点掩码], color="gold", marker=".", label="外点"
)
plt.plot(line_X, line_y, color="navy", linewidth=lw, label="线性回归器")
plt.plot(
line_X,
line_y_ransac,
color="cornflowerblue",
linewidth=lw,
label="RANSAC 回归器"
)
plt.legend(loc="lower right")
plt.xlabel("输入")
plt.ylabel("响应")
plt.show()
总结
在本实验中,我们展示了如何使用 scikit-learn 中的 RANSAC 算法将线性模型稳健地拟合到有缺陷的数据上。我们使用 make_regression 数据集生成随机数据,向数据中添加异常值,将线性模型和 RANSAC 回归器都拟合到数据上,预测两个模型的数据,比较它们的估计系数,并可视化结果。RANSAC 回归器会自动将数据分为内点和外点,并且拟合线仅由识别出的内点确定,这使得它成为一种将模型拟合到含有异常值的数据的更稳健方法。