数据集回归

import matplotlib.pyplot as plt

import seaborn as sns

from sklearn.linear_model import LinearRegression

from sklearn.model_selection import train_test_split

from sklearn.datasets import load_diabetes

from sklearn.metrics import mean_squared_error, r2_score

import pandas as pd

设置中文显示

plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]

plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题

加载糖尿病数据集

diabetes = load_diabetes()

X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)

y = pd.Series(diabetes.target, name='疾病进展')

划分数据集

Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, y, test_size=0.3, random_state=42)

for i in (Xtrain, Xtest):

i.index = range(i.shape[0])

训练线性回归模型

reg = LinearRegression().fit(Xtrain, Ytrain)

yhat = reg.predict(Xtest)

1. 真实值 vs 预测值散点图

plt.figure(figsize=(10, 6))

plt.scatter(Ytest, yhat, alpha=0.6) # alpha设置透明度

plt.plot([Ytest.min(), Ytest.max()], [Ytest.min(), Ytest.max()], 'r--') # 理想预测线

plt.xlabel('真实疾病进展')

plt.ylabel('预测疾病进展')

plt.title('真实值与预测值对比')

plt.show()

2. 残差图(误差分布)

residuals = Ytest - yhat

plt.figure(figsize=(10, 6))

sns.histplot(residuals, kde=True, bins=30) # 直方图+核密度曲线

plt.xlabel('残差(真实值-预测值)')

plt.ylabel('频数')

plt.title('残差分布')

plt.show()

3. 特征影响程度条形图(系数绝对值)

coef = pd.Series(reg.coef_, index=X.columns)

coef_abs = coef.abs().sort_values() # 按系数绝对值排序

plt.figure(figsize=(10, 6))

coef_abs.plot(kind='barh')

plt.xlabel('系数绝对值(影响程度)')

plt.ylabel('特征')

plt.title('各特征对疾病进展的影响程度')

plt.show()

输出评估指标

print(f"均方误差(MSE):{mean_squared_error(Ytest, yhat):.4f}")

print(f"决定系数(R²):{r2_score(Ytest, yhat):.4f}")

数据准备与模型训练

代码首先加载糖尿病数据集,将特征数据转换为DataFrame格式(列名为数据集自带的特征名称),目标变量命名为"疾病进展"。通过train_test_split将数据按7:3比例划分为训练集和测试集,并重置索引以保证数据一致性。随后使用线性回归模型在训练集上拟合,得到模型参数后对测试集进行预测。

可视化评估

  1. 真实值与预测值对比:通过散点图展示测试集真实疾病进展与模型预测值的分布,图中红色虚线为理想预测线(真实值=预测值)。散点越贴近该线,说明预测效果越好,可直观判断模型整体拟合趋势。

  2. 残差分布分析:残差即真实值与预测值的差值,通过直方图结合核密度曲线呈现其分布。若残差近似正态分布且均值接近0,表明模型误差分布合理,无明显偏差;若分布异常(如偏态),则可能存在模型设定问题。

  3. 特征影响程度排序:提取线性回归模型的系数,按绝对值排序后绘制水平条形图,直观展示各特征对疾病进展的影响强度。系数绝对值越大,说明该特征在模型中对预测结果的影响越显著(不反映正负相关性)。

量化评估指标

• 均方误差(MSE):衡量预测值与真实值的平均平方差,数值越小说明模型精度越高。

• 决定系数(R²):表示模型可解释的目标变量变异比例,取值范围为0~1,越接近1说明模型拟合效果越好。