第二章 模型评估与选择

第二章 模型评估与选择

2.1 经验误差与过拟合

错误率 E(error rate)
E = a / m = 样本分类错误 / 样本总数

精度(accuracy)
精度 = 1 - E

误差(error)

  • 训练误差(training error) / 经验误差(empirical error): 学习器在训练集上的误差
  • 泛化误差(generalization): 学习器在新样本上的误差

拟合

  • 过拟合: 训练样本学的过好,泛化性能变差
  • 欠拟合: 学习能力低下

2.2 评估选择

用s实验测试来对学习器的泛化误差进行评估
需要一个训练集训练学习器,一个测试集测试学习器
已知一个包含m个样例的数据集:

既要训练又要测试
测试集尽可能与训练集互斥
以下为几种从数据集 D 产生训练集和测试集的方法

2.2.1 留出法(hold-out)

直接把数据集D划分为两个互斥的集合,
其中一个作为训练集S,另一个作为测试集T

训练集和测试集的划分要尽可能保持数据分布的一致性,
采用分层采样(stratified sampling)

缺点:

  • 若令训练集S包含大多数样本则训练出的模型更接近用D训练出的模型,但T会过小,评估结果不够准确。
  • 若令测试集T包含多一些样本,则训练集S与D差别更大,被评估的模型与用D训练的模型可能有较大差别。

常见做法:2 / 3 ~ 4 / 5样本用于训练,剩余用来测试。

2.2.2 交叉验证法(cross validation)

数据集D划分为k个大小相似的互斥子集:


每个子集都从D中通过分层采样获取,尽可能保持数据分布的一致性。
k-1 个子集的并集作为训练集,剩下的子集作为测试集;
可获得 k 组训练/测试集,进行 k 次训练和测试,最终返回 k 次测试结果的均值。
结果的稳定性保真性取决于k的取值,故又称 "k折交叉验证"(k-fold cross validation)

10折交叉验证示意图

将数据集D划分为k个子集存在多种划分方式
为减少因样本划分不同而引入的差别,需采用不同的划分方式p次
结果为p次k折交叉验证的均值

留一法(Leave-One-Out,LOO): 假定数据集D包含m个样本,令k=m

  • 优点: 被实际评估的模型与期望用D训练的模型很相似,结果往往比较准确。
  • 缺点: 数据集较大时训练m个模型的计算开销难以忍受,估计结果也未必比其它评估方法准确。

2.2.3 自助法(bootstrapping)

给定包含m个样本的数据集D,采样产生D'
自助采样(bootstrap sampling)
每次随机从D中挑选一个样本,拷贝放入D',然后再将该样本放回D中
重复上述过程m次,得到包含m个样本的D'

样本在m次采样中始终不被采到的概率是 ,取极限得:

即通过自助采样,初试数据集D中约有36.8%的样本未出现在D'中,
D'作训练集,D\D'作测试集

  • 优点:
    • 数据集较小、难以有效划分训练/测试集时很有用。
    • 能从初始数据集中产生多个不同的训练集,对集成学习等有很大好处。
  • 缺点:
    • 改变了初始数据集的分布,会引入估计偏差。
    • 数据量足够时,常用留出法和交叉验证法。

2.2.4 调参与最终模型

验证集(validation set)
研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型的泛化能力,
把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参。

2.3 性能度量(performance measure)

什么样的模型是好的,不仅取决于算法和数据,还取决于任务需求
在预测任务中,给定样例集
其中 是示例 的真实标记
要评估学习器 f 的性能,看要把学习器预测结果f(x)和y进行比较

均方误差(mean squared error):

  • 离散:
    对于数据集D:
  • 连续:
    对于数据分布D和概率密度函数p(·):

2.3.1 错误率与精度

错误率: 分类错误的样本数占样本总数的比例
精度: 分类正确的样本数占样本总数的比例

错误率与精度公式

其中II(·)记号:括号内的若符合则记为1,否则记0。

连续函数的错误率

2.3.2 查准率(precision)、查全率(recall)与F1

对于二分类问题,可以根据真实类别与学习器预测类别的组合分为:
真正例(True Positive)、假正例(False Positive)、
真反例(True Negative)、假反例(False Negative)
可得TP+FP+TN+FN=样例总数





















分类结果混淆矩阵(cofusion matrix)
真实情况 预测结果
正例 反例
正例 TP(真正例) FN(假反例)
反例 FP(假正例) TN(真反例)

查准率P(预测正例中真实正例的比率):

查全率R(真实正例中预测正例的比率):

查全率与查准率是一对矛盾的度量,
以查全率为横轴,查准率为纵轴可得P-R曲线
P-R曲线与平衡点示意图:

P-R曲线

P-R图能直观的显示学习器在样本总体上的查全率、查准率,
进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全包住,
则后者的性能优于前者。

很多时候无法完全包住,会产生交叉
此时需要综合考虑查准率和查全率的性能度量:
平衡点(Break-Even Point,BEP):
查准率=查全率 的取值

F1度量: 调和平均

度量:加权调和平均

多数时候会有多个二分类混淆矩阵

一种做法:

  • 宏查准率(macro-P)

  • 宏查全率(macro-R)

  • 宏F1(macro-F1)

另一种做法:
先对混淆矩阵的对应元素求平均,得到TP、FP、TN、FN的平均值:
记为:
再计算:

  • 微查准率(micro-P)

  • 微查全率(macro-R)

  • 微F1(macro-F1)

2.3.3 ROC与AUC

学习器为测试样本产生一个实值或概率预测,然后将预测值与分类阈值(threshold) 比较,
大于阈值则为正类,小于阈值则为反类

根据实值或概率预测可以将测试样本进行排序,
"最可能"是正例的排在最前面,"最不可能"是正例的排在最后面,
分类过程即相当于在排序中以某个截断点(cut point) 将样本分为两部分,
前一部分为正例,后一部分为反例

可根据不同任务需求选择截断点:

  • 若更重视查准率,截断点靠
  • 若更重视查全率,截断点靠

ROC:受试者工作特征(Receiver Operating Characteristic)

  • 纵轴:真正例率(True Positive Rate , TPR)

  • 横轴:假正例率(False Positive Rate , FPR)

ROC曲线与AUC

对角线对应于随机猜测模型;
(0,1)点对应于所有正例都在反例之前的理想模型

现实任务为有限样例,只能绘制图(b)所示的近似ROC曲线。
绘制方法:

  1. 给定个正例和个反例,
  2. 根据学习器预测结果进行排序,
  3. 把分类阈值调到最大值,即所有样例均预测为反例,此时TPR和FPR均为0,即原点
  4. 然后将分类阈值依次设置为每一个样例的预测值,即依次将每个样例划分为正例
  5. 设前一个点坐标为(x,y)
    • 若为真正例,当前点坐标为
    • 若为假正例,当前点坐标为

与P-R图类似,若一个学习器的ROC曲线被另一个学习器的曲线完全包住,
则后者的性能优于前者。
若曲线产生交叉,可以用AUC(Area Under ROC Curve,ROC曲线下的面积)进行比较。

AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系
给定个正例和个反例,令和分别表示正、反例集合
则有
排序损失(loss):

排序损失

指的是正例样本,
指的是反例样本,
指的是学习器给出的概率预测结果

真正例率的分母是,假正例率的分母是
ROC曲线图可看成矩形分割成个小矩形,则:
为ROC曲线上部分的面积
AUC为ROC曲线下部分的面积

2.3.4 代价敏感错误率与代价曲线

为权衡不同类型错误所造成的不同损失,可为错误赋予"非均等代价"(unequal cost)





















二分类代价矩阵(cost matrix)
真实类别 预测类别
第0类 第1类
第0类 0 cost_01
第1类 cost_10 0

:表示将第i类样本预测为第j类样本的代价
一般来说,

令第0类作为正类,第1类作为反类,
作为正例子集,作为反例子集。

代价敏感(cost-sensitive)错误率:

代价敏感错误率

非均等条件下,ROC曲线不能直接反映学习器的期望总体代价,
代价曲线(cost curve) 可以。

  • 横轴:正例概率代价,取值范围[0,1]


其中,p为样例为正例的概率

  • 纵轴:归一化代价,取值范围[0,1]


其中FPR是假正例率,FNR=1-TPR是假反例率。

代价曲线的绘制:

  1. ROC曲线上的每一点对应了代价平面上的一条线段
  2. 设ROC曲线上的一点为(FPR,TPR),则可计算出FNR
  3. 代价平面上绘制一条线段,起始点:(0,FPR),终点:(1,FNR)
  4. 这条线段下方的面积代表着在该点条件下的期望总体代价
  5. 将ROC曲线上的所有点都转化为代价曲线上的线段
  6. 取所有线段的下界即为代价曲线
  7. 围成的面积即为在所有条件下学习器的期望总体代价
代价曲线

2.4 比较检验

对学习器性能进行评估

  1. 希望比较泛化性能,但实验只能获得测试集上的性能,与真实的结果未必相等
  2. 测试集上的性能与测试集的选择有很大关系:
    • 不同大小的测试集,结果可能不同
    • 相同大小但包含的测试样例不同,结果可能不同
  3. 机器学习算法本身具有一定的随机性,即便是相同参数在同样的测试集上多次运行,其结果也会有不同

故通过统计假设检验(hypothesis test)来进行学习器性能比较
先介绍两种最基本的假设检验,默认以错误率为性能度量,用表示。

2.4.1 假设检验

现实中我们只能获取测试错误率,
而不知道其泛化错误率
二者未必相同,但接近的可能性比较大,因此可通过测试错误率估推出泛化错误率。

泛化错误率为的学习器在一个样本上犯错的概率是;
测试错误率意味着在m个测试样本中有个被误分类。
假设测试样本是从样本总体分布中独立采样而得,
那么泛化错误率为的学习器将其中m'个样本误分类
其余样本全部分类正确的概率为

其中,

由此可估算出学习器刚好将个样本误分类的概率为:

这也表示了在m个样本的测试集上,泛化错误率为的学习器被测得测试错误率为的概率。

对于给定的(做实验得到的)测试错误率,由可得,在时取最大值,符合二项分布(binomial)
如下图所示,取,则10个样本中测得3个被误分类的概率最大。

二项分布示意图

使用二项检验(binomial test)对 (泛化错误率是否不大于3)的假设进行检验
考虑假设 ,
在 的概率内所能观测到的最大错误率如下式(为置信度(confidence),对应上图非阴影部分):


(s.t.是“subject to”的简写,表示在右式条件满足的时候左式才成立)
这里公式还有疑问

若测试错误率 小于临界值 ,
则根据二项检验可得:

  • 在的显著度下,假设 不能被拒绝
    即在的置信度下可认为学习器的泛化错误率不大于
  • 否则,拒绝该假设,即在的显著度下认为泛化错误率大于

大多数时候我们并非只做一次留出法估计,而是通过多次重复留出法或交叉验证法等进行多次训练/测试,会得到多个测试错误率,此时可用"t检验"。
假定我们得到k个测试错误率,,则此时有:

  • 平均测试错误率:
  • 方差:

考虑到k个测试错误率可看作泛化错误率 的独立采样,则有变量:
服从自由度为 k-1 的t分布
如下图:

t分布示意图

对于假设 和显著度,
可以计算当测试错误率为时,在概率内能观测到的最大错误率,即临界值。
如上图所示,两边阴影部分各有的面积
阴影部分范围分别为
若 位于临界值范围内内,则不能拒绝假设

下表给出一些常用临界值:






























双边 t 检验常用临界值
a k
2 5 10 20 30
0.05 12.706 2.776 2.262 2.093 2.045
0.10 6.314 2.132 1.833 1.729 1.699

上面是对于单个学习器泛化性能的假设进行检验,
而在现实中我们需要对不同学习器的性能进行比较,
下面介绍此类情况的假设检验方法。

2.4.2 交叉验证t检验

对两个学习器A和B,记使用k折交叉验证法得到的测试错误率分别为和,
其中,表示在相同的第i折训练/测试集上得到的结果。
可用k折交叉验证"比较t检验"(paired t-tests)进行比较检验。
基本思想:若两个学习器性能相同,则使用相同的训练/测试集得到的测试错误率应相同,即

具体做法:

  1. 对每对结果做差,
  2. 若两个学习器性能相同,则差值的均值应为0
  3. 根据差值对"学习器性能相同,即"的假设进行 t 检验
  4. 计算出差值的均值和方差
  5. 在显著度下:
    • 若变量小于临界值,则假设不能被拒绝,即学习器性能没有显著差别
    • 否则可以认为两个学习器性能有显著差别,且平均错误率较小的性能更优
      ( 指自由度为k-1的 t 分布的上侧 分位点 )

对于一个有效的假设检验,应保证测试错误率都是泛化错误率的独立采样,
但在上述过程中,所采用的训练集在不同轮次会有一定程度的重叠,故测试错误率并不独立,
为缓解这一问题,故采用"交叉验证"法
具体做法:

  1. 做5次2折交叉验证
  2. 每次2折交叉验证之前把数据随机打乱,使得5次中数据划分不重复
  3. 对两个学习器A、B,第i次2折交叉验证将产生两对测试错误率,做差:
    • 第1折差值:
    • 第2折差值:
  4. 为缓解测试错误率的非独立性,仅计算第1次2折交叉验证的两个结果的均值
  5. 对每次2折交叉验证的结果都计算方差
  6. 变量
    • 服从自由度为5的t分布
    • 双边检验临界值:
      • 当时,取2.5706
      • 当时,取2.0150

2.4.3 McNemar检验

对于二分类问题,留出法不仅可以估计学习器A和B的测试错误率,还能获得两学习器分类结果的差别,如列联表(contingency table):





















两学习器分类差别列联表
算法B 算法A
正确 错误
正确 e_00 e_01
错误 e_10 e_11

做假设两学习器性能相同,则有
那么变量应符合正态分布
McNemar检验考虑变量:

服从自由度为 1 的分布
自由度为 1 的检验的临界值:

  • 当时,取3.8415
  • 当时,取2.7055

2.4.4 Frideman检验与Nemenyi后续检验

交叉验证t检验和McNemar检验都是在一个数据集上比较两个算法的性能,
而很多时候需要在一组数据集上对多个算法进行比较。
两种办法:

  1. 在每个数据集上分别两两比较,可采用上述方法
  2. 基于算法排序的Frideman检验

假设用4个数据集:对算法A、B、C进行比较
使用留出法或交叉验证法得到每个算法在每个数据集上的测试结果,
然后再每个数据集上根据测试性能由好到坏排序,赋予序值1,2,3,...
若性能相同则平分序值,如下图:

算法比较序值表

然后使用Frideman检验判断算法的性能是否相同
若相同,则平均序值应相同

假定在N个数据集上比较k个算法,令表示第i个算法的平均序值(暂不考虑平分序值)
的均值为(k+1)/2,方差为
变量:

当k和N较大时,服从自由度为k-1的分布

上述原始Frideman检验过于保守,现常使用:
变量:
服从自由度为k-1和(k-1)(N-1)的 F 分布
下表为一些常用临界值

F检验常用临界值

若"所有算法性能相同"这个假设被拒绝,则说明算法的性能显著不同,
这时需要进行后续检验(post-hoc test)来进一步区分算法
常用Nemenyi后续检验

计算出平均序值差别的临界值域:

下表给出常用的值
若两个算法的平均序值之差超过了临界值域CD,则拒绝假设"所有算法性能相同"

NeMenyi检验常用qa值

2.5 偏差与方差

通过"偏差-方差分解"来解释学习算法的泛化性能

泛化误差=偏差+方差+噪声
偏差:度量学习算法的期望预测与真实结果的偏离程度,刻画学习算法本身的拟合能力
方差:度量同样大学的训练集的变动导致的学习性能的变化,刻画数据扰动产生的影响
噪声:表达当前任务上任何学习算法所能达到的期望泛化误差的下界,刻画学习问题本身的难度

一般来说,偏差与方差是有冲突的,称为偏差-方差窘境(bias-variance dilemma)


泛化误差与偏差、方差关系示意图

训练不足时,学习器拟合能力较弱,泛化误差较大
训练充足后,继续训练会使学习器过拟合,泛化误差增高

你可能感兴趣的:(第二章 模型评估与选择)