趋近智
使用Scikit-learn构建、训练和评估简单线性回归模型的完整过程将被演示。这将涉及使用真实数据集来预测一个连续目标变量。
首先,我们需要导入所需的库和模块。我们将需要Pandas进行可能的数据处理(尽管Scikit-learn数据集通常返回NumPy数组或Bunch对象),以及Scikit-learn用于数据集、模型、分割函数和评估指标。
import numpy as np
import pandas as pd
from sklearn.datasets import fetch_california_housing
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
import plotly.graph_objects as go # For visualization
我们将使用加利福尼亚住房数据集,这是一个在Scikit-learn中直接提供的常用回归任务数据集。目标是根据普查数据中的各种特征,预测加利福尼亚各区域的房屋中位价。
# Load the dataset
california = fetch_california_housing(as_frame=True)
X = california.data
y = california.target
# Display some information about the data
print("特征 (X):")
print(X.head())
print("\n目标 (y) - 房屋中位价:")
print(y.head())
print("\n数据集描述:")
print(california.DESCR[:500] + "...") # 打印描述的前500个字符
输出显示了我们特征(如收入中位数、房龄、平均房间数)和目标变量(房屋中位价)的前几行。描述提供了特征和预测任务的背景信息。
在训练之前,标准做法是将数据集分成两部分:训练集和测试集。模型从训练集中学习模式。然后,我们在未见过的测试集上评估其性能,以获得模型在新数据上泛化能力的无偏估计。我们为此使用了Scikit-learn的train_test_split函数。
# 将数据分割为训练集(80%)和测试集(20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"X_train 的形状: {X_train.shape}")
print(f"X_test 的形状: {X_test.shape}")
print(f"y_train 的形状: {y_train.shape}")
print(f"y_test 的形状: {y_test.shape}")
我们设置test_size=0.2来分配20%的数据用于测试,并使用random_state以确保可重现性,从而保证每次运行代码时都能获得相同的分割结果。
现在我们实例化LinearRegression模型,并使用我们的训练数据(X_train和y_train)对其进行拟合。fit方法是模型学习特征与目标变量之间关系的地方,它会计算线性方程的最佳系数。
# 创建一个线性回归模型实例
model = LinearRegression()
# 使用训练数据训练模型
model.fit(X_train, y_train)
print("模型训练完成。")
print(f"截距: {model.intercept_}")
print(f"系数: {model.coef_}")
拟合后,模型学习了截距和每个特征的系数。这些表示在训练数据中确定的线性关系。
模型训练完成后,我们现在可以使用它在新数据(未见过的数据)上进行预测。我们对测试集(X_test)使用predict方法。
# 在测试集上进行预测
y_pred = model.predict(X_test)
# 显示前5个预测值和实际值
print("前5个预测值:", y_pred[:5])
print("前5个实际值:", y_test[:5].values)
模型输出一个基于X_test中特征的预测房屋中位价数组。我们可以将这些预测值(y_pred)与实际已知值(y_test)进行比较。
这些预测效果如何?我们需要量化 (quantization)指标来评估模型的性能。我们将使用前面讨论的评估指标:平均绝对误差(MAE)、均方误差(MSE)和R平方()分数。这些指标通过比较预测值(y_pred)与实际值(y_test)计算得出。
# 计算评估指标
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse) # 计算均方根误差
r2 = r2_score(y_test, y_pred)
print(f"平均绝对误差 (MAE): {mae:.4f}")
print(f"均方误差 (MSE): {mse:.4f}")
print(f"均方根误差 (RMSE): {rmse:.4f}")
print(f"R平方 (R2 分数): {r2:.4f}")
我们来解读这些结果:
通过散点图比较实际值(y_test)与预测值(y_pred),可以对模型的性能进行视觉评估。对于一个好的模型,我们期望点紧密聚集在预测值等于实际值的对角线附近。
散点图比较了部分测试数据样本的预测房屋中位价(y轴)与实际值(x轴)。红色虚线表示完美预测(y=x)。点越靠近这条线,表示预测效果越好。
这个可视化证实了评估指标的结果。虽然存在明显的正相关性,但点在理想线附近有些分散,这反映了计算出的R平方分数约为0.59以及非零的误差指标。
您现在已经成功地使用Scikit-learn构建、训练、预测并评估了一个线性回归模型。这个实践工作流程是处理许多回归问题的根本。在后续章节中,我们将了解更复杂的模型和提升性能的技术。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•