8-2 机器学习模型评估(回归指标)

🎯 教学目标与重难点…
  • 📚 知识目标

    • 理解模型评估在机器学习全流程中的作用与意义。
    • 掌握回归算法常用的四大核心评估指标:$MAE$(平均绝对误差)、$MSE$(均方误差)、$RMSE$(均方根误差)与 $R^2$(决定系数)。
    • 理解 $R^2$ 的物理意义(0~1 之间的得分,越接近 1 越好)。
  • ⚙️ 能力目标

    • 能够熟练使用 sklearn.metrics 模块中的评估函数对线性回归模型进行效果打分。
    • 能够结合业务场景选择合适的评估指标,分析模型的预测偏差。
  • 💡 素养目标

    • 培养严谨的科学测试与验证思维,建立“用客观数据说话”的工程意识。
  • 🟢 教学重点:$MAE$、$MSE$、$RMSE$ 与 $R^2$ 的定义、公式含义及 sklearn 代码实现。

  • 🟡 教学难点:$R^2$(决定系数)的直观理解(与基准模型/均值模型的对比)及其在实际业务中的判断标准。


📌 一、 课程导入(10分钟)

在上节课《8-1 线性回归》中,我们学会了用 model.fit(X, y) 拟合出一条预测线。

抛出问题: 假设我们拟合出了两个房价预测模型(模型 A 和模型 B),模型 A 预测一套房子差了 5 万元,模型 B 预测差了 12 万元。

  1. 我们怎么用一个量化的指标告诉客户哪个模型更好?
  2. 如果考试满分是 100 分,有没有一个指标能给机器学习模型也打一个 0 ~ 1 之间的“成绩单”

核心结论: 数据拟合只是第一步,模型评估才是验证算法能否真实落地的“验货把关”过程。

  • 👨‍🏫 教师活动:展示两个误差不同的房价预测结果图表,抛出“如何量化评价模型好坏”的问题,引出本节课的主题。
  • 🧑‍🎓 学生活动:观察图表,对比预测值与真实值的差距,思考如何用数字表达“精准度”。

以“给模型打分”这一形象生动的比喻切入,消除数学指标的枯燥感,帮助学生快速建立“模型评估与测试”的工程视角。


📖 二、 解决问题过程(一):四大回归评估指标原理(25分钟)

假设真实值为 $y$,模型预测值为 $\hat{y}$,样本数量为 $n$:

1. MAE(Mean Absolute Error,平均绝对误差)

$$\text{MAE} = \frac{1}{n}\sum_{i=1}^{n}\vert{}y_i - \hat{y}_i\vert{}$$
  • 含义:预测误差绝对值的平均数。
  • 优点:单位与原始数据完全一致(如“平均相差 X 万元”),最直观易懂。

2. MSE(Mean Squared Error,均方误差)

$$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$$
  • 含义:预测误差平方的平均数(上节课损失函数)。
  • 特点:对离群点(大误差)非常敏感,误差越大惩罚越重。

3. RMSE(Root Mean Squared Error,均方根误差)

$$\text{RMSE} = \sqrt{\text{MSE}} = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2}$$
  • 含义:对 MSE 开平方。
  • 优点:既保留了 MSE 对大误差惩罚的特性,又把单位还原回了原始数据的量纲。

4. $R^2$ Score(Coefficient of Determination,决定系数)

$$\text{R}^2 = 1 - \frac{\sum(y_i - \hat{y}_i)^2}{\sum(y_i - \bar{y})^2} = 1 - \frac{\text{残差平方和(你的模型误差)}}{\text{总平方和(瞎猜均值的误差)}}$$
  • 物理意义你的模型比“只猜平均值”的基准模型好多少?
  • 打分区间
    • $R^2 = 1$:完美预测,零误差。
    • $R^2 \approx 0.8 \sim 0.9$:模型效果非常优秀。
    • $R^2 = 0$:模型效果和“直接猜平均值”没有任何区别。
    • $R^2 < 0$:模型极差,预测效果还不如直接猜平均值。
  • 👨‍🏫 教师活动:逐一推导和对比 MAE、MSE、RMSE 的量纲区别;重点用“跟平均值瞎猜比较”的图示解释 $R^2$ 的直观含义。
  • 🧑‍🎓 学生活动:记录四个指标的英文缩写与中文含义,思考为什么 MSE 需要开平方(RMSE)。

从简单直观的 MAE 循序渐进引出 $R^2$,突破“决定系数”公式抽象的教学难点,让学生彻底搞懂 $R^2$ 为什么被称为“模型成绩单”。


💻 三、 解决问题过程(二):使用 Scikit-Learn 进行评估代码实践(25分钟)

在 Python 中,sklearn.metrics 模块提供了内置的评估 API,也可以直接使用模型的 .score() 方法。

 1import numpy as np
 2from sklearn.linear_model import LinearRegression
 3from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
 4
 5# 1. 准备示例数据(房屋面积 vs 实际售价)
 6X = np.array([[50], [60], [70], [80], [90], [100]])
 7y = np.array([150, 175, 210, 240, 265, 310])  # 单位:万元
 8
 9# 2. 训练线性回归模型
10model = LinearRegression()
11model.fit(X, y)
12
13# 3. 获取模型预测值
14y_pred = model.predict(X)
15
16# 4. 计算四大回归评估指标
17mae = mean_absolute_error(y, y_pred)
18mse = mean_squared_error(y, y_pred)
19rmse = np.sqrt(mse)  # 或 mean_squared_error(y, y_pred, squared=False)
20r2 = r2_score(y, y_pred)
21
22print(f"--- 📊 模型评估报告 ---")
23print(f"MAE  (平均绝对误差): {mae:.2f} 万元")
24print(f"MSE  (均方误差)    : {mse:.2f}")
25print(f"RMSE (均方根误差)  : {rmse:.2f} 万元")
26print(f"R²   (决定系数得分): {r2:.4f}")
27
28# 补充:直接使用 model.score() 计算 R²
29r2_direct = model.score(X, y)
30print(f"Model .score() 输出: {r2_direct:.4f}")
  • 👨‍🏫 教师活动:在 Jupyter Notebook 中演示代码,重点对比 mean_absolute_errorr2_score 的输出结果,并讲解 model.score(X, y) 的简便用法。
  • 🧑‍🎓 学生活动:同步编写代码并运行,观察打印出的评估报告;尝试向 y 中引入一个离群异常值,观察哪个评估指标变化最剧烈。

通过工业级 API 代码演示,让学生掌握如何在实际项目中用 3 行代码快速生成模型的评估报告,实现“理论到工程”的落地。


✍️ 四、 解决问题过程(三):课堂练习与巩固(20分钟)

📝 任务一:二手车售价预测模型的“验货”打分…

背景与题目: 某二手车评估系统拟合了一组二手车行驶里程(万公里)与售价(万元)的数据:

  • 真实售价 y_true = [12.0, 9.5, 8.0, 6.2, 5.0, 3.5]
  • 模型预测 y_pred = [11.8, 9.8, 7.6, 6.5, 4.8, 3.8]

任务要求

  1. 计算该模型的 MAE 和 RMSE,用一句话解释 MAE 的实际业务含义。
  2. 计算该模型的 $R^2$ 得分,并评估该模型是否可以投入实际使用(以 $R^2 > 0.85$ 为合格标准)。
🔍 查看参考代码与解析…
 1import numpy as np
 2from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
 3
 4y_true = np.array([12.0, 9.5, 8.0, 6.2, 5.0, 3.5])
 5y_pred = np.array([11.8, 9.8, 7.6, 6.5, 4.8, 3.8])
 6
 7mae = mean_absolute_error(y_true, y_pred)
 8rmse = np.sqrt(mean_squared_error(y_true, y_pred))
 9r2 = r2_score(y_true, y_pred)
10
11print(f"MAE : {mae:.3f} 万元")
12print(f"RMSE: {rmse:.3f} 万元")
13print(f"R²  : {r2:.4f}")
14
15# 业务结论分析:
16# 1. MAE = 0.267 万元,说明模型预测二手车价格平均误差约为 2670 元。
17# 2. R² 得分为 0.9912 (> 0.85),说明模型拟合效果极其优秀,完全可以投入实际业务使用。

📝 五、 课堂小结(5 分钟)

flowchart LR
    root["📊 8-2 模型评估(回归)"]

    subgraph C1["💡 核心概念"]
        direction TB
        A1["评估目的:给算法打分验货"]
        A2["训练集与测试集评估的区别"]
    end

    subgraph C2["📐 量纲指标"]
        direction TB
        B1["MAE:平均绝对误差(原始单位)"]
        B2["MSE:均方误差(放大离群误差)"]
        B3["RMSE:均方根误差(还原原始单位)"]
    end

    subgraph C3["🏆 打分指标"]
        direction TB
        C1_node["R2 决定系数(0 ~ 1 分数)"]
        C2_node["含义:对比均值瞎猜模型的提升程度"]
    end

    subgraph C4["💻 代码实现"]
        direction TB
        D1["sklearn.metrics 模块"]
        D2["model.score 函数直接获取 R2"]
    end

    root --> C1
    root --> C2
    root --> C3
    root --> C4

    %% 自定义主题色彩美化
    style root fill:#4b6cb7,stroke:#253b6e,color:#fff,stroke-width:2px,rx:8px,ry:8px
    style C1 fill:#e3f2fd,stroke:#2196f3,stroke-width:1px
    style C2 fill:#fff3e0,stroke:#ff9800,stroke-width:1px
    style C3 fill:#e8f5e9,stroke:#4caf50,stroke-width:1px
    style C4 fill:#f3e5f5,stroke:#9c27b0,stroke-width:1px

📮 六、 课后作业与拓展

📮 课后作业…
  1. 基础巩固题:使用上节课《8-1 线性回归》作业中拟合的二手手机售价模型,编写代码计算其 $MAE$ 和 $R^2$ 指标,并输出一句结论(如:“该模型 $R^2$ 为 XX,平均预测误差为 XX 元”)。
  2. 拓展思考题:如果某个模型的 $R^2$ 得分算出来是负数(比如 -0.15),这可能是什么原因造成的?(提示:模型预测结果与真实趋势是否相反?)

📋 七、 板书设计

🛠️ 板书设计…
 18-2 机器学习模型评估(回归指标)
 2
 3一、四大核心评估指标                     三、R²(决定系数)含义
 41. MAE  (平均绝对误差) -> |y - y_hat|      R² = 1 - (模型残差平方和 / 均值残差平方和)
 52. MSE  (均方误差)     -> (y - y_hat)²     · R² = 1   : 完美拟合
 63. RMSE (均方根误差)   -> √MSE             · R² > 0.8 : 优秀可投入使用
 74. R²   (决定系数)     -> 综合得分 (0~1)   · R² = 0   : 等于直接猜平均值
 8
 9二、Sklearn 代码实现                    四、代码简记
10from sklearn.metrics import                model.score(X, y) -> 直接返回 R²
11    mean_absolute_error,
12    mean_squared_error,
13    r2_score