Menu
CoddyTech

糖尿病进展

本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 55 课,共 58 课。

一家糖尿病诊所根据每位患者在一年内病情可能发展的程度安排复诊。在第 2 单元中,一个特征只能说明部分情况:

诊所患者的疾病进展情况与标准化 BMI 的关系,图中有一大片散点,一条橙色线穿过散点向上延伸,标注为仅使用 BMI:R 平方 0.34

现在,load_diabetes 的全部十项测量值都会输入模型。诊所应该信任哪个模型?预测会相差多少分?

它希望通过交叉验证进行公平的选择,在未见过的患者数据上诚实地评估误差,并检查残差,看看模型遗漏了什么。

challenge icon

挑战

困难

程序会将 Ridge 的 alpha 值读入 alphas;起始代码会设置图表标题。

  1. 使用 random_state=0 留出四分之一的数据作为测试集。
  2. 在训练数据上进行 5 折交叉验证,分别为每个 alpha 值评估一个 LinearRegression 和一个 Ridge。打印每个模型的平均决定系数(保留 3 位小数),然后打印获胜模型。
  3. 拟合获胜模型,并打印它在测试集上的 MAE 和 RMSE(保留 1 位小数)以及决定系数(保留 3 位小数)。
  4. 以预测值为横轴,绘制测试集残差(真实值减去预测值)的散点图。添加一条零线,然后显示图表。

换一家诊所,并使用 alpha 值 0.5 和 2.0 时:

Linear: CV R squared 0.472
Ridge 0.5: CV R squared 0.481
Ridge 2.0: CV R squared 0.402
Winner: Ridge 0.5
Test errors: MAE 47.3, RMSE 58.9, R squared 0.414

然后 Coddy 会描述你的残差图表。

亲手试试

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

diabetes = load_diabetes(as_frame=True)
X = diabetes.data
y = diabetes.target

# 要尝试的 Ridge alpha 值
n = int(input())
alphas = []
for i in range(n):
    alphas.append(float(input()))

fig, ax = plt.subplots()
ax.set_title("Residuals on Test Patients")
ax.set_xlabel("Predicted progression")
ax.set_ylabel("Residual (true - predicted)")

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

监督学习中的所有课

自己练习: Python 在线编译器