python编程实现Ransec算法,要求:生成一些线性回归数据,并人为添加了一些异常值。使用RANSAC算法拟合了数据。最后,使用 matplotlib 绘制了内点、外点以及拟合方法的结果。
时间: 2024-09-28 15:03:02 浏览: 32
在Python中,我们可以使用Scikit-Learn库中的ransacRegressor模块来实现RANSAC(Random Sample Consensus)算法,它是一种鲁棒的机器学习方法,用于从包含噪声和异常值的数据集中找出模型。下面是一个简单的例子,我们将模拟线性回归数据并加入异常值,然后使用RANSAC进行拟合并绘制结果:
首先,我们需要导入必要的库:
```python
import numpy as np
from sklearn.linear_model import RANSACRegressor
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
```
接着,我们生成线性回归数据:
```python
np.random.seed(42)
X, y = make_regression(n_samples=100, n_features=1, noise=2, random_state=0)
# 人为添加一些异常值
y[::5] += np.abs(np.random.randn(int(len(y)/5))) * 10
```
现在,我们可以使用RANSACRegressor进行拟合:
```python
ranger = RANSACRegressor(random_state=0)
ranger.fit(X, y)
inlier_mask = ranger.inlier_mask_
outlier_mask = np.logical_not(inlier_mask)
line_X = np.arange(min(X), max(X), 0.01).reshape(-1, 1)
line_y = ranger.predict(line_X)
```
接下来,绘制原始数据、内点(inliers)和拟合线:
```python
fig, ax = plt.subplots()
ax.scatter(X[inlier_mask], y[inlier_mask], s=60, c='blue', label="Inliers")
ax.scatter(X[outlier_mask], y[outlier_mask], s=60, c='red', marker='x', label="Outliers")
ax.plot(line_X, line_y, color='black', linewidth=2, label="Fit Line (RANSAC)")
ax.set_xlabel("Feature")
ax.set_ylabel("Target")
ax.legend()
plt.show()
```
阅读全文