线性回归示例

Beginner

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

简介

本实验展示了如何使用线性回归来绘制最适合数据集的直线,以及如何计算系数、残差平方和与决定系数。我们将使用 scikit-learn 库对糖尿病数据集进行线性回归。

虚拟机使用提示

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

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

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

加载糖尿病数据集

我们首先从 scikit-learn 中加载糖尿病数据集,并仅从数据集中选择一个特征。

import numpy as np
from sklearn import datasets

## 加载糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)

## 仅使用一个特征
diabetes_X = diabetes_X[:, np.newaxis, 2]

分割数据集

接下来,我们将数据集分割为训练集和测试集。我们将使用 80% 的数据进行训练,20% 的数据进行测试。

## 将数据分割为训练集/测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]

## 将目标分割为训练集/测试集
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]

训练模型

现在,我们创建一个线性回归对象,并使用训练集来训练模型。

from sklearn import linear_model

## 创建线性回归对象
regr = linear_model.LinearRegression()

## 使用训练集训练模型
regr.fit(diabetes_X_train, diabetes_y_train)

进行预测

现在我们可以使用训练好的模型对测试集进行预测。

## 使用测试集进行预测
diabetes_y_pred = regr.predict(diabetes_X_test)

计算指标

我们可以计算系数、均方误差和决定系数。

from sklearn.metrics import mean_squared_error, r2_score

## 系数
print("系数:\n", regr.coef_)

## 均方误差
print("均方误差:%.2f"
      % mean_squared_error(diabetes_y_test, diabetes_y_pred))

## 决定系数:1 表示完美预测
print("决定系数:%.2f"
      % r2_score(diabetes_y_test, diabetes_y_pred))

可视化结果

最后,我们可以将预测值与实际值进行绘图,以直观展示模型对数据的拟合程度。

import matplotlib.pyplot as plt

## 绘制输出
plt.scatter(diabetes_X_test, diabetes_y_test, color="black")
plt.plot(diabetes_X_test, diabetes_y_pred, color="blue", linewidth=3)

plt.xticks(())
plt.yticks(())

plt.show()

总结

在本实验中,我们学习了如何使用线性回归将一条直线拟合到一个数据集,以及如何计算系数、残差平方和与决定系数。我们还学习了如何使用散点图将预测值与实际值进行可视化展示。