SE-ML02-模型评估与选择

统计学习方法三要素

模型

在假设空间中的一个具体假设。是一个需要学习的函数。

策略

如何从假设空间中选择最优的假设/模型。

怎么判断模型优不优秀?损失函数与风险函数。

损失函数

评估 $f$ 在样本 $X$ 上,与真实值 $Y$ 的差距。

常见的损失函数:

  • 平方损失函数 $$L(Y,f(X))=(Y-f(X)^2)$$
  • 0-1损失函数 $$L(Y,f(X))=\begin{equation}\begin{cases}1,Y\neq f(X) \ \0,Y= f(X)\end{cases} \end{equation} $$

风险函数

经验风险:模型在训练数据集上的平均损失 结构风险:在经验风险的基础上,增加对模型复杂度,或者其他自定义惩罚

两种风险越低,模型越优。

算法

学习模型的具体方法。即损失函数或者风险函数的最优化问题。

有两种情况:

  • 问题存在解析解,直接求解问题就可以得到最优模型
  • 问题没有解析解,那就需要梯度下降、牛顿法这种方式去逼近最优解

最小二乘法就是存在解析解的问题,可以直接通过解方程求得使模型最优的参数。神经网络就需要不断通过梯度下降的方式更新权重。

评估方法

解决 “如何获得测试结果” 的问题

测试集与训练集的划分

留出法

将拥有的数据集,一部分划作训练集,剩下就是测试集。

注意:

  • 保持数据分布一致性(分层采样)
  • 多次重复划分(?没看懂)
  • 测试集的比例,在 20% ~ 33% 间

K-折交叉验证法

将测试集分为 K 份。进行 k 次训练。每一次按顺序选取第 i 份作为测试集,其他作为训练集。将 k 次的测试结果取平均,作为最终的结果。

自助法

一种可重复采样的方法。训练集和测试集可能有交集。

调参

在整个训练过程中,有两种参数:

  • 算法的参数。就是超参数,使用验证集人工调参
  • 模型的参数。由学习确定

在模型训练中,将验证集和训练集一起作为训练集。

性能度量

衡量模型泛化能力

均方误差

回归任务常用均方误差来评估:

$$ E(f;D)=\frac{1}{m}\sum_{i=1}^{m}(F(x_i)-y_i)^2 $$

错误率和精度

精度:

$$ acc(f;D)=\frac{1}{m}\sum_{i=1}^{m}II(f(x_i)=y_i) $$

其中罗马数字二 $II(expr)$ 是一个函数,用于将表达式 $expr$ 的布尔值转换为 0-1

错误率:不贴公式了,就是 1-精度

查全率和查准率

查准率(预测结果为正例中,有多少是 ground-truth):

$$ Precision=\frac{TP}{TP+FP} $$

查全率(所有 ground-truth 中,多少被预测为正例):

$$ Recall=\frac{TP}{TP+FN} $$

F1 score

综合查准率和查全率,得到的评估指标。

$$ F1=\frac{2\times Precision \times Recall}{Precision + Recall} $$ 如果对二者有不同偏好,可以加权重:

$$ F_\beta=\frac{(1+\beta^2)\times P \times R}{(\beta^2\times P)+R} $$ $\beta>1$ 时,更偏向查全率。

P-R curve

macro-micro

ROC, AUC

非均等代价

模型选择

如何比较模型

首先,不能根据上一步的性能度量,来直接评判模型优劣。因为性能度量是基于测试集的。

  • 测试性能不等于泛化性能
  • 测试性能随着测试集的变化而变化
  • 模型本身就有随机性

使用统计假设检验来比较不同的学习器。

两个学习器之间

  • 交叉验证 t 检验(基于成对 t 检验)
  • McNemar 检验 (基于列联表,卡方检验)

多学习器比较

  • Friedman + Nemenyi
    • Friedman 检验,基于序值,F 检验。判断是否都相同
    • Nemenyi 后续检验,基于序值。进一步判断两两差别