[机器学习-从入门到入土] 模型评估与选择

个人导航

知乎: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/34/5 作为训练集
    • 剩余作为测试集

缺点: 对一次划分结果敏感, 方差较大

2.交叉验证(Cross Validation)
  • 将数据集划分为 k k k

  • 每次用 k − 1 k-1 k1 份训练,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} 1m1
连续 m m m 次未被抽中:
( 1 − 1 m ) m \left(1 - \frac{1}{m}\right)^m (1m1)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 mlim(1m1)m=e10.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 pt → 预测正
  • 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+R2PR=m+TPTN2TP
加权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=1nPimacro_R=n1i=1nRimacro_F1=macro_P+macro_R2macro_Pmacro_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_R2micro_Pmicro_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 关系 类别不平衡鲁棒 对正类极小数据不敏感

例题

在这里插入图片描述

在这里插入图片描述

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐