Skip to content

第2章 模型评估与选择 ​

🎯 学习目标 ​

  • 掌握模型评估方法:留出法、交叉验证、自助法
  • 理解分类任务中的核心评估指标:准确率、精确率、召回率、F1分数
  • 掌握混淆矩阵的构成及其各元素的含义
  • 理解 ROC 曲线和 AUC 指标的原理与应用
  • 认识阈值调整对模型性能的影响
  • 了解偏差-方差分解的权衡关系
  • 了解比较检验的基本方法

2.1 经验误差与过拟合 ​

📌 基本概念

  • 训练误差 (training error):模型在训练集上的误差,也称经验误差
  • 泛化误差 (generalization error):模型在新样本上的误差,这是我们真正关心的
  • 过拟合 (overfitting):模型把训练样本的特有性质当作一般性质来学习,训练误差低但泛化误差高
  • 欠拟合 (underfitting):模型未能学到数据的基本规律,训练误差和泛化误差都高

⚠️ 核心矛盾

我们无法直接获得泛化误差,只能通过实验来估计它。因此需要有效的评估方法来选择模型。过拟合是机器学习中的核心挑战,无法完全避免,只能尽量减小。

2.2 评估方法 ​

如何对模型的泛化能力做出可靠估计?关键是从数据集中划分出训练集和测试集,用测试集上的表现来近似泛化误差。

留出法 (Hold-out) ​

📊 留出法

将数据集 D 划分为两个互斥的子集:训练集 S 和测试集 T,即 D=S∪T,S∩T=∅。

要点:

  • 采用分层采样 (stratified sampling),保持训练集和测试集的类别比例一致
  • 常见划分比例:训练集占 2/3 ~ 4/5
  • 单次划分结果不够稳定,通常进行多次随机划分,取平均值作为最终评估结果
优点缺点
简单直观评估结果受划分方式影响
计算开销小训练/测试比例需要权衡

k 折交叉验证 (k-fold Cross Validation) ​

📊 交叉验证

将数据集 D 分成 k 个大小相近的互斥子集 D1,D2,…,Dk,每次用其中 k−1 个子集的并集作为训练集,剩余的 1 个子集作为测试集。这样可以进行 k 次训练和测试,最终取 k 次测试结果的均值:

CVk=1k∑i=1kEi

其中 Ei 是第 i 折的测试误差。

常用设置:

参数典型值说明
k10最常用,称为「10折交叉验证」
k5数据量较大时
k = m留一法 (LOO)m 为样本总数,计算开销极大
💡 留一法 (Leave-One-Out, LOO)

当 k=m(样本总数)时,称为留一法。每次只留一个样本做测试,其余全部用于训练。

优点:训练集与原始数据集仅差一个样本,评估结果最接近真实泛化性能。

缺点:当数据量大时,需要训练 m 个模型,计算开销极大。例如 m=10000 时需训练 10000 次。

自助法 (Bootstrapping) ​

📊 自助法

对数据集 D(m 个样本)进行 m 次有放回采样,得到训练集 D′。未被采到的样本作为测试集。

某个样本在 m 次采样中始终未被采到的概率为:

limm→∞(1−1m)m=1e≈0.368

即约 36.8% 的样本未出现在训练集中,可以作为测试集。这称为包外估计 (out-of-bag estimate)。

适用场景不适用场景
数据集较小数据量充足时(引入分布偏差)
集成学习中的 Bagging对训练集分布敏感的模型

⚠️ 注意

自助法改变了原始数据集的分布(有放回采样导致重复样本),在数据量足够时,留出法和交叉验证更为常用。

2.3 评估指标基础 ​

🎯 为什么需要评估指标?

在监督学习中,我们需要定量地评估模型的性能。不同的应用场景对模型有不同的要求:

  • 医疗诊断:更关注召回率(不能漏诊)
  • 垃圾邮件过滤:更关注精确率(不能误判正常邮件)
  • 信用评估:需要平衡准确率和公平性

混淆矩阵 (Confusion Matrix) ​

混淆矩阵是理解分类器性能的基础工具,它展示了预测结果与真实标签的对应关系:

TP
真正例
正确预测为正
FP
假正例
错误预测为正
FN
假负例
错误预测为负
TN
真负例
正确预测为负

💡 提示

所有评估指标都基于混淆矩阵的这四个值计算得出。

核心评估指标 ​

基于混淆矩阵,我们可以定义以下指标:

准确率 (Accuracy)=TP+TNTP+FP+TN+FN精确率 (Precision)=TPTP+FP召回率 (Recall)=TPTP+FNF1 分数=2×Precision×RecallPrecision+Recall

TPR 与 FPR ​

真正例率 (True Positive Rate),又称召回率或灵敏度:

TPR=TPTP+FN

表示所有正样本中,被正确分类的比例。

假正例率 (False Positive Rate),又称误报率:

FPR=FPFP+TN

表示所有负样本中,被错误分类为正的比例。

🎯 关键洞察

  • 理想分类器:TPR → 1(捕获所有正例),FPR → 0(避免误报)
  • ROC 曲线绘制了不同阈值下 (FPR, TPR) 的变化轨迹
  • 调整阈值是在召回率和误报率之间做权衡

公式推导动画 ​

ROC 曲线核心指标推导

理解 TPR 和 FPR 的数学定义

TP
真正例
True Positive
FP
假正例
False Positive
FN
假负例
False Negative
TN
真负例
True Negative

2.4 ROC 曲线与 AUC ​

📈 什么是 ROC 曲线?

ROC (Receiver Operating Characteristic) 曲线 是一种图形化工具,用于评估二分类模型在所有可能的分类阈值下的性能。

  • 横轴:假正例率 (FPR) — 所有负样本中被错误分类为正的比例,理想情况下应接近 0
  • 纵轴:真正例率 (TPR) — 所有正样本中被正确分类的比例,理想情况下应接近 1

AUC 的含义 ​

AUC (Area Under Curve) 是 ROC 曲线下的面积,取值范围在 0 到 1 之间:

AUC 范围含义
AUC = 1.0完美分类器,所有样本都被正确分类
AUC = 0.9–1.0优秀的分类器
AUC = 0.7–0.9良好的分类器
AUC = 0.5随机猜测的性能基线
AUC < 0.5比随机猜测还差(可能标签反了)

交互式演示 ​

拖动滑块调整分类阈值,观察 ROC 曲线上的操作点如何移动,以及各项指标如何变化。

0.001.00

混淆矩阵

0
真正例 (TP)
0
假正例 (FP)
0
假负例 (FN)
0
真负例 (TN)

评估指标

准确率 (Accuracy)0.0%
精确率 (Precision)0.0%
召回率 (Recall/TPR)0.0%
F1 分数0.0%
FPR0.0%

面积对比

完整 AUC0.000
当前累积面积0.000
0.0% of total

💡 拖动阈值滑块,观察黄色进度条的变化!

完整 AUC:整条 ROC 曲线下方的蓝色半透明区域,表示模型在所有阈值下的综合性能。当前 AUC = 0.000

橙色高亮区域:从起点 (0,0) 到当前操作点的部分面积。调整阈值滑块,观察橙色区域如何动态变化!

橙色圆点:表示当前阈值下的操作点 (FPR, TPR),对应右侧混淆矩阵的统计结果

💡 提示:降低阈值 → 更多样本被预测为正类 → FPR 和 TPR 同时增加 → 操作点向右上方移动

2.5 偏差与方差 ​

⚖️ 偏差-方差权衡

模型的泛化误差可以分解为三个部分:

偏差 (Bias) : 模型预测的期望值与真实值之间的差距。高偏差导致欠拟合。

方差 (Variance) : 模型在不同训练集上预测结果的变化程度。高方差导致过拟合。

噪声 (Noise) : 数据本身的随机性,无法通过模型消除。

💡 关键洞察

降低偏差通常会增加方差,反之亦然。找到最佳平衡点是模型优化的核心目标。

2.6 比较检验 ​

🔬 为什么需要比较检验?

当我们通过评估方法得到模型的性能度量后,如何判断两个模型的性能差异是统计显著的,而不仅仅是偶然波动?这就需要借助假设检验的工具。

假设检验基本思想 ​

在统计假设检验中,我们通常假设「两个模型没有性能差异」(零假设 H0),然后通过计算检验统计量来判断是否有足够的证据拒绝这一假设。

常用显著性水平 α=0.05,即当 p 值小于 0.05 时,认为差异显著。

交叉验证 t 检验 ​

对两个模型 A 和 B 分别进行 k 折交叉验证,得到 k 对测试误差 ϵ1A,ϵ1B,…,ϵkA,ϵkB。

令差值 Δi=ϵiA−ϵiB,计算均值 μ 和方差 σ2:

τt=kμσ

该统计量服从自由度为 k−1 的 t 分布。若 |τt| 大于临界值 tα/2,k−1,则拒绝零假设,认为两模型性能有显著差异。

McNemar 检验 ​

📊 McNemar 检验

适用于比较两个模型在同一测试集上的表现。构造列联表:

模型B正确模型B错误
模型A正确e00e01
模型A错误e10e11

检验统计量:

τχ2=(|e01−e10|−1)2e01+e10

服从自由度为 1 的 χ2 分布。

Friedman 检验与 Nemenyi 后续检验 ​

📊 多个模型在多个数据集上的比较

当需要比较多个模型在多个数据集上的性能时:

  1. Friedman 检验:先对每个数据集上的模型性能排序,再检验这些排序值是否存在显著差异。若 Friedman 检验拒绝「所有模型性能相同」的假设,则进行后续检验。

  2. Nemenyi 后续检验:计算临界排序差 (Critical Difference, CD):

    CD=qαk(k+1)6N

    其中 k 是模型数,N 是数据集数,qα 是查表得到的临界值。若两个模型的平均排序之差超过 CD,则认为它们的性能有显著差异。

2.7 实践练习 ​

💪 练习1:理解阈值调整

使用上方的 ROC 交互式演示:

  1. 将阈值设为 0.2,观察混淆矩阵和评估指标
  2. 将阈值设为 0.8,再次观察变化
  3. 思考:什么情况下应该选择较低的阈值?什么情况下应该选择较高的阈值?
💪 练习2:指标权衡

考虑以下场景,选择最合适的优化目标:

  • 场景A:癌症筛查模型 — 应该优化召回率(TPR),避免漏诊,宁可多一些假阳性。
  • 场景B:垃圾邮件过滤 — 应该优化精确率,避免将重要邮件标记为垃圾邮件。
  • 场景C:欺诈检测 — 需要平衡召回率和精确率,可以使用 F1 分数作为综合指标。
💡 练习3:解释 AUC

思考题:为什么 AUC 是一个好的综合性能指标?

答案:AUC 衡量了模型在所有可能的阈值下的平均性能,不依赖于特定阈值的选择。它表示随机选择一个正样本和一个负样本,模型给正样本打分更高的概率。AUC 对类别不平衡问题也相对鲁棒,是评估排序质量的好指标。

📝 本章小结 ​

总结

  • ✅ 过拟合和欠拟合是模型选择的核心问题
  • ✅ 评估方法:留出法简单快速,交叉验证更稳健,自助法适合小数据集
  • ✅ 混淆矩阵是理解分类性能的基础,包含 TP、FP、TN、FN 四个要素
  • ✅ 不同应用场景需要关注不同指标:准确率、精确率、召回率、F1分数
  • ✅ ROC 曲线展示了模型在不同阈值下的性能权衡
  • ✅ AUC 提供了一个与阈值无关的综合性能度量
  • ✅ 偏差-方差权衡是模型选择和优化的核心考虑因素
  • ✅ 比较检验帮助判断模型性能差异是否具有统计显著性

基于周志华《机器学习》教材