Appearance
第2章 模型评估与选择
🎯 学习目标
- 掌握模型评估方法:留出法、交叉验证、自助法
- 理解分类任务中的核心评估指标:准确率、精确率、召回率、F1分数
- 掌握混淆矩阵的构成及其各元素的含义
- 理解 ROC 曲线和 AUC 指标的原理与应用
- 认识阈值调整对模型性能的影响
- 了解偏差-方差分解的权衡关系
- 了解比较检验的基本方法
2.1 经验误差与过拟合
📌 基本概念
- 训练误差 (training error):模型在训练集上的误差,也称经验误差
- 泛化误差 (generalization error):模型在新样本上的误差,这是我们真正关心的
- 过拟合 (overfitting):模型把训练样本的特有性质当作一般性质来学习,训练误差低但泛化误差高
- 欠拟合 (underfitting):模型未能学到数据的基本规律,训练误差和泛化误差都高
⚠️ 核心矛盾
我们无法直接获得泛化误差,只能通过实验来估计它。因此需要有效的评估方法来选择模型。过拟合是机器学习中的核心挑战,无法完全避免,只能尽量减小。
2.2 评估方法
如何对模型的泛化能力做出可靠估计?关键是从数据集中划分出训练集和测试集,用测试集上的表现来近似泛化误差。
留出法 (Hold-out)
📊 留出法
将数据集
要点:
- 采用分层采样 (stratified sampling),保持训练集和测试集的类别比例一致
- 常见划分比例:训练集占 2/3 ~ 4/5
- 单次划分结果不够稳定,通常进行多次随机划分,取平均值作为最终评估结果
| 优点 | 缺点 |
|---|---|
| 简单直观 | 评估结果受划分方式影响 |
| 计算开销小 | 训练/测试比例需要权衡 |
k 折交叉验证 (k-fold Cross Validation)
📊 交叉验证
将数据集
其中
常用设置:
| 参数 | 典型值 | 说明 |
|---|---|---|
| k | 10 | 最常用,称为「10折交叉验证」 |
| k | 5 | 数据量较大时 |
| k = m | 留一法 (LOO) | m 为样本总数,计算开销极大 |
💡 留一法 (Leave-One-Out, LOO)
当
优点:训练集与原始数据集仅差一个样本,评估结果最接近真实泛化性能。
缺点:当数据量大时,需要训练
自助法 (Bootstrapping)
📊 自助法
对数据集
某个样本在
即约 36.8% 的样本未出现在训练集中,可以作为测试集。这称为包外估计 (out-of-bag estimate)。
| 适用场景 | 不适用场景 |
|---|---|
| 数据集较小 | 数据量充足时(引入分布偏差) |
| 集成学习中的 Bagging | 对训练集分布敏感的模型 |
⚠️ 注意
自助法改变了原始数据集的分布(有放回采样导致重复样本),在数据量足够时,留出法和交叉验证更为常用。
2.3 评估指标基础
🎯 为什么需要评估指标?
在监督学习中,我们需要定量地评估模型的性能。不同的应用场景对模型有不同的要求:
- 医疗诊断:更关注召回率(不能漏诊)
- 垃圾邮件过滤:更关注精确率(不能误判正常邮件)
- 信用评估:需要平衡准确率和公平性
混淆矩阵 (Confusion Matrix)
混淆矩阵是理解分类器性能的基础工具,它展示了预测结果与真实标签的对应关系:
TP
真正例
正确预测为正
FP
假正例
错误预测为正
FN
假负例
错误预测为负
TN
真负例
正确预测为负
💡 提示
所有评估指标都基于混淆矩阵的这四个值计算得出。
核心评估指标
基于混淆矩阵,我们可以定义以下指标:
TPR 与 FPR
真正例率 (True Positive Rate),又称召回率或灵敏度:
表示所有正样本中,被正确分类的比例。
假正例率 (False Positive Rate),又称误报率:
表示所有负样本中,被错误分类为正的比例。
🎯 关键洞察
- 理想分类器: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
真正例 (TP)
0
假正例 (FP)
0
假负例 (FN)
0
真负例 (TN)
评估指标
准确率 (Accuracy)0.0%
精确率 (Precision)0.0%
召回率 (Recall/TPR)0.0%
F1 分数0.0%
FPR0.0%
面积对比
完整 AUC:整条 ROC 曲线下方的蓝色半透明区域,表示模型在所有阈值下的综合性能。当前 AUC = 0.000
橙色高亮区域:从起点 (0,0) 到当前操作点的部分面积。调整阈值滑块,观察橙色区域如何动态变化!
橙色圆点:表示当前阈值下的操作点 (FPR, TPR),对应右侧混淆矩阵的统计结果
💡 提示:降低阈值 → 更多样本被预测为正类 → FPR 和 TPR 同时增加 → 操作点向右上方移动
2.5 偏差与方差
⚖️ 偏差-方差权衡
模型的泛化误差可以分解为三个部分:
偏差 (Bias) : 模型预测的期望值与真实值之间的差距。高偏差导致欠拟合。
方差 (Variance) : 模型在不同训练集上预测结果的变化程度。高方差导致过拟合。
噪声 (Noise) : 数据本身的随机性,无法通过模型消除。
💡 关键洞察
降低偏差通常会增加方差,反之亦然。找到最佳平衡点是模型优化的核心目标。
2.6 比较检验
🔬 为什么需要比较检验?
当我们通过评估方法得到模型的性能度量后,如何判断两个模型的性能差异是统计显著的,而不仅仅是偶然波动?这就需要借助假设检验的工具。
假设检验基本思想
在统计假设检验中,我们通常假设「两个模型没有性能差异」(零假设
常用显著性水平
交叉验证 t 检验
对两个模型 A 和 B 分别进行 k 折交叉验证,得到 k 对测试误差
令差值
该统计量服从自由度为
McNemar 检验
📊 McNemar 检验
适用于比较两个模型在同一测试集上的表现。构造列联表:
| 模型B正确 | 模型B错误 | |
|---|---|---|
| 模型A正确 | ||
| 模型A错误 |
检验统计量:
服从自由度为 1 的
Friedman 检验与 Nemenyi 后续检验
📊 多个模型在多个数据集上的比较
当需要比较多个模型在多个数据集上的性能时:
Friedman 检验:先对每个数据集上的模型性能排序,再检验这些排序值是否存在显著差异。若 Friedman 检验拒绝「所有模型性能相同」的假设,则进行后续检验。
Nemenyi 后续检验:计算临界排序差 (Critical Difference, CD):
其中
是模型数, 是数据集数, 是查表得到的临界值。若两个模型的平均排序之差超过 CD,则认为它们的性能有显著差异。
2.7 实践练习
💪 练习1:理解阈值调整
使用上方的 ROC 交互式演示:
- 将阈值设为 0.2,观察混淆矩阵和评估指标
- 将阈值设为 0.8,再次观察变化
- 思考:什么情况下应该选择较低的阈值?什么情况下应该选择较高的阈值?
💪 练习2:指标权衡
考虑以下场景,选择最合适的优化目标:
- 场景A:癌症筛查模型 — 应该优化召回率(TPR),避免漏诊,宁可多一些假阳性。
- 场景B:垃圾邮件过滤 — 应该优化精确率,避免将重要邮件标记为垃圾邮件。
- 场景C:欺诈检测 — 需要平衡召回率和精确率,可以使用 F1 分数作为综合指标。
💡 练习3:解释 AUC
思考题:为什么 AUC 是一个好的综合性能指标?
答案:AUC 衡量了模型在所有可能的阈值下的平均性能,不依赖于特定阈值的选择。它表示随机选择一个正样本和一个负样本,模型给正样本打分更高的概率。AUC 对类别不平衡问题也相对鲁棒,是评估排序质量的好指标。
📝 本章小结
总结
- ✅ 过拟合和欠拟合是模型选择的核心问题
- ✅ 评估方法:留出法简单快速,交叉验证更稳健,自助法适合小数据集
- ✅ 混淆矩阵是理解分类性能的基础,包含 TP、FP、TN、FN 四个要素
- ✅ 不同应用场景需要关注不同指标:准确率、精确率、召回率、F1分数
- ✅ ROC 曲线展示了模型在不同阈值下的性能权衡
- ✅ AUC 提供了一个与阈值无关的综合性能度量
- ✅ 偏差-方差权衡是模型选择和优化的核心考虑因素
- ✅ 比较检验帮助判断模型性能差异是否具有统计显著性