📜  Python|使用 sklearn 进行线性回归(1)

📅  最后修改于: 2023-12-03 14:46:25.986000             🧑  作者: Mango

Python | 使用 sklearn 进行线性回归

线性回归是统计学中最基本的回归分析方法之一,它通常用于寻找线性关系。Python 的机器学习库 scikit-learn(sklearn)提供了一个实现线性回归的模块,使得我们可以在 Python 中轻松进行线性回归分析。

本文将介绍如何使用 sklearn 进行线性回归模型的训练、预测和评估。

数据集

我们使用 diabetes 数据集作为例子。该数据集包含 442 个患者的 10 个生理特征和一年后的疾病进展。

我们首先导入数据集并查看数据的基本信息。

from sklearn.datasets import load_diabetes
dataset = load_diabetes()
print(dataset.feature_names)
print(dataset.data[:5])
print(dataset.target[:5])

输出结果:

['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
[[ 0.03807591  0.05068012  0.06169621  0.02187235 -0.0442235  -0.03482076
  -0.04340085 -0.00259226  0.01990842 -0.01764613]
 [-0.00188202 -0.04464164 -0.05147406 -0.02632783 -0.00844872 -0.01916334
   0.07441156 -0.03949338 -0.06832974 -0.09220405]
 [ 0.08529891  0.05068012  0.04445121 -0.00567061 -0.04559945 -0.03419447
  -0.03235593 -0.00259226  0.00286377 -0.02593034]
 [-0.08906294 -0.04464164 -0.01159501 -0.03665645  0.01219148  0.02452668
  -0.03603757  0.03430986  0.02269202 -0.00936191]
 [ 0.00538306 -0.04464164 -0.03638469  0.02187235  0.00393485  0.0153543
   0.00814208 -0.00259226 -0.03199144 -0.04664087]]
[151.  75. 141. 206. 135.]

其中 feature_names 是特征名称,data 表示特征数据,target 则是目标变量。

数据预处理

在应用机器学习算法时,数据预处理是很重要的步骤之一。线性回归也不例外,我们需要对数据进行预处理。

在本例中,我们使用 StandardScaler 类来将数据按特征和样本均值缩放。将数据缩放为这样的形式可避免某些特征权重过大的问题。

代码如下:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(dataset.data)
y = dataset.target
划分训练集和测试集

我们将数据集划分成训练集和测试集。测试集用于评估模型的性能,训练集用于训练模型。

代码如下:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
模型训练

我们可以使用 LinearRegression 类来训练模型。代码如下:

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)
模型预测

我们可以使用训练好的模型来预测测试集上的结果。代码如下:

y_pred = lr.predict(X_test)
模型评估

我们可以使用平均绝对误差(MAE)、均方误差(MSE)和 R 平方分数等指标来评估模型的性能。代码如下:

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
print("MAE: %.2f" % mean_absolute_error(y_test, y_pred))
print("MSE: %.2f" % mean_squared_error(y_test, y_pred))
print("R2: %.2f" % r2_score(y_test, y_pred))

输出结果:

MAE: 43.06
MSE: 2980.20
R2: 0.51

以上的 MAE、MSE 和 R 平方分数表明,模型的性能并不太好,但仍有一定的预测能力。

总结

本文介绍了如何使用 sklearn 进行线性回归模型的训练、预测和评估。你可以通过对数据进行预处理、划分训练集和测试集等操作来提高模型的性能。

完整代码片段如下所示:

from sklearn.datasets import load_diabetes
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

# 导入数据集并查看数据信息
dataset = load_diabetes()
print(dataset.feature_names)
print(dataset.data[:5])
print(dataset.target[:5])

# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(dataset.data)
y = dataset.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 模型训练
lr = LinearRegression()
lr.fit(X_train, y_train)

# 模型预测
y_pred = lr.predict(X_test)

# 模型评估
print("MAE: %.2f" % mean_absolute_error(y_test, y_pred))
print("MSE: %.2f" % mean_squared_error(y_test, y_pred))
print("R2: %.2f" % r2_score(y_test, y_pred))