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

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

个人导航

知乎: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)

超参数 vs 参数

参数:模型学出来的(权重)

超参数:你事先设定的(学习率、正则化、网络深度等)

为什么需要验证集validation
  • train:拟合模型
  • validation:选模型 / 调参
  • test:一次性评估

理论上:

  • 测试集test的标签我们不应该知道
  • 只允许知道 train / validation 的标签
网格搜索

为每个超参数设置:

  • 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(查准率)

"预测的可靠性":

从模型预测为正的样本 来看,有多少是真的
P = T P T P + F P P=\frac{TP}{TP+\mathbf{FP}} P=TP+FPTP
假阳性FP代价高时重视 Precision

  • 例如:垃圾邮件识别,如果误杀正常邮件代价高
  • 精度高意味着你发出的"正例"警告可信
3.Recall(召回率 / 查全率)

"检出率":

实际正样本 来看,有多少被模型找出来
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 关系 类别不平衡鲁棒 对正类极小数据不敏感
相关推荐
Allen_LVyingbo14 小时前
医疗AI多智能体协同路径规划(Cooperative Multi-Agent Path Finding)技术综述(上)
人工智能·python·算法·知识图谱·健康医疗
V搜xhliang024614 小时前
大数据与人工智能背景下的影像组学:肾脏肿瘤精准诊疗新范式
大数据·人工智能
超声波沙龙14 小时前
意料之中,百度对AI的长期投入开始价值大爆发了
人工智能·百度
nvd1114 小时前
RAG与向量余弦距离:深入理解大语言模型背后的数学原理
人工智能
雨大王51214 小时前
汽车制造工艺数字化转型:冲、焊、涂环节的智能优化与协同
人工智能
love530love14 小时前
EPGF 新手教程 04一个项目一个环境:PyCharm 是如何帮你“自动隔离”的?(全 GUI,新手零命令)
运维·开发语言·ide·人工智能·python·pycharm
草莓熊Lotso14 小时前
从冯诺依曼到操作系统:打通 Linux 底层核心逻辑
linux·服务器·c++·人工智能·后端·系统架构·系统安全
haiyu_y14 小时前
Day 55 序列预测任务详解
人工智能·pytorch·深度学习
艾莉丝努力练剑14 小时前
【QT】初识QT:背景介绍
java·运维·数据库·人工智能·qt·安全·gui