[机器学习-从入门到入土] 模型评估与选择
[机器学习-从入门到入土] 模型评估与选择
[机器学习-从入门到入土] 模型评估与选择
个人导航
知乎:https://www.zhihu.com/people/byzh_rc
CSDN:https://blog.csdn.net/qq_54636039
注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码
参考文章:各方资料
文章目录
经验误差 vs 泛化误差
1.经验误差(empirical error)
模型在训练集上的误差(训练误差)
- 是一个可观测量, 不等价于模型真实能力
- 经验误差可以被刻意压得很低(甚至为 0)
2.泛化误差(generalization error)
模型在未见过的新样本上的误差(真实目标)
- 真正想最小化的量
- 泛化误差不可直接计算
过拟合与欠拟合
1.过拟合(Overfitting)
训练误差小,泛化误差大
把训练数据中的噪声当成了规律
2.欠拟合(Underfitting)
训练误差和泛化误差都大
- 模型能力不足, 连训练集的基本模式都刻画不了
过拟合无法被彻底解决
若能彻底解决过拟合,相当于证明 P = NP
P(Polynomial time)
→ 容易「找到答案」的问题NP(Nondeterministic Polynomial time)
→ 容易「验证答案」的问题P vs NP 问题:
是否所有“容易验证”的问题,也都“容易求解”?
测试误差与 i.i.d. 假设
用测试误差近似泛化误差
泛化误差不可计算
-> 只能用“未见样本”的误差来估计
i.i.d. 假设的作用
i.i.d. = independent and identically distributed = 独立同分布
这是整个统计学习理论的根基假设
若不满足 i.i.d., 则测试误差 ≠ 泛化误差
-> 所有评估方法都会失效
训练集与测试集必须互斥
若测试集泄漏训练信息, 测试误差将系统性偏小
-> 相当于“作弊”
数据集划分方法
1.留出法(Hold-out)
-
直接将数据集分成两部分:
- Train
- Test
-
分层抽样(stratified sampling)
- 各类别比例保持一致(防止类别不平衡)
-
常见比例:
- 2 / 3 ∼ 4 / 5 2/3 \sim 4/5 2/3∼4/5 作为训练集
- 剩余作为测试集
缺点: 对一次划分结果敏感, 方差较大
2.交叉验证(Cross Validation)
-
将数据集划分为 k k k 份
-
每次用 k − 1 k-1 k−1 份训练,1 份测试
-
重复 k k k 次,结果取平均
-
常用:
- k = 10 k=10 k=10
-
留一法(LOO, Leave-One-Out)
- k = m k=m k=m(样本总数)
缺点: 深度学习中较少使用交叉验证(计算成本太高)
优点: 用多次训练+测试来降低评估方差
3.自助法(Bootstrapping)
有放回抽样
从原始数据集 D D D 中:
- 每次随机抽取 1 个样本
- 重复 m m m 次
- 得到大小仍为 m m m 的新数据集 D ′ D' D′
性质:
- 原始数据集中约 36.8% 的样本不会出现在 D ′ D' D′ 中
- D ′ D' D′ → 训练集
- 未被抽到的 36.8 % 36.8\% 36.8% → 测试集
推导:
单次未被抽中的概率:
1 − 1 m 1 - \frac{1}{m} 1−m1
连续 m m m 次未被抽中:
( 1 − 1 m ) m \left(1 - \frac{1}{m}\right)^m (1−m1)m
极限:
lim m → ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim_{m\to\infty}\left(1-\frac{1}{m}\right)^m=\frac{1}{e}\approx0.368 m→∞lim(1−m1)m=e1≈0.368
参数调优(Parameter Tuning)
1.超参数 vs 参数
参数:模型学出来的(权重)
超参数:你事先设定的(学习率、正则化、网络深度等)
2.为什么需要验证集validation
- train:拟合模型
- validation:选模型 / 调参
- test:一次性评估
理论上:
- 测试集test的标签我们不应该知道
- 只允许知道 train / validation 的标签
3.网格搜索
为每个超参数设置:
- start
- end
- step
枚举所有组合,选验证集表现最优的

性能度量 Performance Measure
评估的相对性:
- 不同任务 → 不同指标
- 没有“万能指标”
1.混淆矩阵
| 预测正例 (Pred=1) | 预测负例 (Pred=0) | |
|---|---|---|
| 真实正例 (Actual=1) | TP(True Positive) | FN(False Negative) |
| 真实负例 (Actual=0) | FP(False Positive) | TN(True Negative) |

2.Precision(查准率)
“预测的可靠性”:
从模型预测为正的样本来看,有多少是真的(True)
P = T P T P + F P P=\frac{TP}{TP+\mathbf{FP}} P=TP+FPTP
假阳性FP代价高时重视 Precision
- 例如:垃圾邮件识别,如果误杀正常邮件代价高
- 精度高意味着你发出的“正例”警告可信
3.Recall(召回率 / 查全率)
“检出率”:
从实际正样本来看,有多少被模型找出来(Positive)
R = T P T P + F N R=\frac{TP}{TP+\mathbf{FN}} R=TP+FNTP
假阴性FN代价高时重视 Recall
- 医疗诊断:漏掉病人代价大
- 安全监控、杀毒软件:漏掉威胁代价大
4.权衡 Precision 与 Recall
分类器通常输出概率 p p p,并用阈值 t t t 决定正负:
- p ≥ t p \ge t p≥t → 预测正
- p < t p < t p<t → 预测负
规律:
- 阈值 降低 → 更容易预测为正 → TP ↑, FP ↑
- Recall ↑ (更多正样本被找出来)
- Precision ↓ (假阳性增加)
- 阈值 升高 → 更严格 → TP ↓, FP ↓
- Recall ↓
- Precision ↑
5. F1-score(综合指标)
综合考虑了 P P P和 R R R:
F1 是 调和平均,更偏向低的那个值
F 1 = 2 ∗ P ∗ R P + R = 2 ∗ T P m + T P − T N F1=\frac{2*P*R}{P+R}=\frac{2*TP}{m+TP-TN} F1=P+R2∗P∗R=m+TP−TN2∗TP
加权Fβ-score:
F β = ( 1 + β 2 ) P R β 2 P + R F_\beta=\frac{(1+\beta^2)PR}{\beta^2P+R} Fβ=β2P+R(1+β2)PR
- β > 1 \beta > 1 β>1 → 更关注 Recall
- β < 1 \beta < 1 β<1 → 更关注 Precision
宏平均 (Macro)
- 每个类别的指标先算平均
- 对类别不平衡 敏感
m a c r o _ P = 1 n ∑ i = 1 n P i m a c r o _ R = 1 n ∑ i = 1 n R i m a c r o _ F 1 = 2 ∗ m a c r o _ P ∗ m a c r o _ R m a c r o _ P + m a c r o _ R macro\_P = \frac{1}{n}\sum_{i=1}^nP_i \\ macro\_R = \frac{1}{n}\sum_{i=1}^nR_i \\ macro\_F1 = \frac{2*macro\_P*macro\_R}{macro\_P+macro\_R} macro_P=n1i=1∑nPimacro_R=n1i=1∑nRimacro_F1=macro_P+macro_R2∗macro_P∗macro_R
微平均 (Micro)
- 将 TP、FP、FN 全部加起来再算 F1
- 对类别不平衡 不敏感
m i c r o _ P = T P ‾ T P ‾ + F P ‾ m i c r o _ R = T P ‾ T P ‾ + F N ‾ m i c r o _ F 1 = 2 ∗ m i c r o _ P ∗ m i c r o _ R m i c r o _ P + m i c r o _ R micro\_P=\frac{\overline{TP}}{\overline{TP}+\overline{FP}} \\ micro\_R=\frac{\overline{TP}}{\overline{TP}+\overline{FN}} \\ micro\_F1 = \frac{2*micro\_P*micro\_R}{micro\_P+micro\_R} micro_P=TP+FPTPmicro_R=TP+FNTPmicro_F1=micro_P+micro_R2∗micro_P∗micro_R
选择:
- 小类重要 → 宏平均
- 总体性能 → 微平均
6. P-R 曲线 (Precision-Recall Curve)
横轴:Recall
纵轴:Precision
- 曲线越靠右上角 → 模型越好
- 如果一条曲线完全包住另一条 → 覆盖的模型在所有阈值下都更优
- 有时用 P=R 的点 作为折中指标
小样本或类别不平衡时比 ROC 更有价值

7. ROC 曲线 (Receiver Operating Characteristic)
横轴 FPR: false positive rate: 从实际负样本来看,有多少被预测错了
F P R = F P T N + F P FPR=\frac{FP}{TN+FP} FPR=TN+FPFP
纵轴 TPR: true positive rate: 从实际正样本来看,有多少被预测对了
T P R = T P T P + F N ( = R e c a l l ) TPR=\frac{TP}{TP+FN}(=Recall) TPR=TP+FNTP(=Recall)
阈值变化 → TPR, FPR 变化 → 绘制 ROC

曲线越靠左上角 → 更优:

左上角:TPR 高,FPR 低 → “找到大部分正例,同时少误报负例”
对角线:随机猜测
总结比较
| 指标 | 关注 | 优势 | 劣势 |
|---|---|---|---|
| Precision | 预测正例可靠性 | FP 代价大 | 对漏报不敏感 |
| Recall | 检出率 | FN 代价大 | FP 增加 |
| F1-score | P/R 平衡 | 综合指标 | 无法体现不同业务权重 |
| P-R 曲线 | 阈值敏感 | 小样本 & 不平衡 | 只反映正类性能 |
| ROC 曲线 | TPR/FPR 关系 | 类别不平衡鲁棒 | 对正类极小数据不敏感 |
例题


更多推荐


所有评论(0)