使用保序回归进行非线性回归

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将使用 scikit-learn 探索保序回归。保序回归是一种将非递减函数拟合到一维数据的技术。当你的数据在回归模型中不满足线性假设时,它会很有用。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

导入必要的库

让我们从 sklearn.isotonic 模块中导入 IsotonicRegression 类开始。

from sklearn.isotonic import IsotonicRegression

创建示例数据

接下来,我们需要创建一些示例数据来拟合我们的保序回归模型。在这个例子中,我们将生成两个数组 Xy,分别代表输入数据和目标值。

import numpy as np

## 生成随机输入数据
np.random.seed(0)
X = np.random.rand(100)
y = 4 * X + np.random.randn(100)

拟合保序回归模型

现在,我们可以将保序回归模型拟合到我们的数据上。我们创建一个 IsotonicRegression 类的实例,并使用我们的输入数据和目标值调用 fit 方法。

## 拟合保序回归模型
ir = IsotonicRegression()
ir.fit(X, y)

使用模型进行预测

在拟合模型之后,我们可以使用它对新数据进行预测。让我们创建一个新的数组 X_new 并预测相应的目标值。

## 创建用于预测的新数据
X_new = np.linspace(0, 1, 100)
y_pred = ir.predict(X_new)

可视化结果

最后,让我们可视化我们的保序回归模型的结果。我们可以将原始数据点绘制成散点,将预测值绘制成一条线。

import matplotlib.pyplot as plt

## 绘制原始数据和预测值
plt.scatter(X, y, c='b', label='Original Data')
plt.plot(X_new, y_pred, c='r', label='Isotonic Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

总结

当你拥有不符合线性回归模型假设的非线性数据时,保序回归是一种有用的技术。通过将一个非递减函数拟合到数据上,保序回归提供了一个分段线性近似,它捕捉了数据中的潜在趋势。在这个实验中,我们学习了如何使用 scikit-learn 的 IsotonicRegression 类来拟合保序回归模型、进行预测以及可视化结果。