机器学习笔记五——模型评估与选择3——比较检验

有了实验评估方法和评估指标,看似可以对分类器的性能进行评估比较了:先使用某种试验评估方法测得分类器的某个评估指标结果,然后对这些结果进行比较。但怎么来做这个“比较”呢?

直接选取相应评估方法在相应度量下比大小的方法不可取!

因为关于性能比较:

  • 测试性能并不等于泛化性能
  • 测试性能会随着测试集的变化而变化
  • 很多机器学习算法本身有一定的随机性

那么应该如何有效地进行模型比较呢?答案是采用统计假设检验(hypothesis test)。基于假设检验结果,我们可以推断出,若在测试集上观察到模型A优于B,则A的泛化性能是否在统计意义上也优于B,以及做这个结论的把握有多大。

假设检验是数理统计学中根据一定条件由样本推断总体的一种方法。
假设检验定义如下:

  • 在总体的分布函数完全未知或已知其形式,但不知其参数的情况,为了推断总体的某些未知特性,提出一些关于总体的假设。我们要根据样本对所提出的的假设做出是接受还是拒绝的决策。

几个基础概念:

  • 置信度:表示有多大的把握认为假设是正确的。
  • 显著度:也称“显著性水平”,表示假设出错的概率。显著度越大,假设被拒绝的可能性越大。
  • 自由度:不被限制的样本数,也可以理解为能自由取值的样本数,记为 vvv 或 dfdfdf。

1、单个模型、单个数据集上的泛化性能检验

1.1 二项检验

对于一个学习器的泛化错误率 ϵ \epsilon ϵ,我们做出一个假设: ϵ ≤ ϵ 0 \epsilon\le\epsilon_0 ϵϵ0

那么如何知道这个猜想对不对呢?假如我们已知 ϵ \epsilon ϵ的值,那么只需将 ϵ \epsilon ϵ ϵ 0 \epsilon_0 ϵ0比大小就能得知猜想是否正确。但问题是,一个学习器的泛化错误率并不能事先得到。我们只能得到这个学习器的测试错误率 ϵ ^ \hat\epsilon ϵ^

泛化错误率为 ϵ \epsilon ϵ的学习器在一个样本上的概率是 ϵ \epsilon ϵ;测试错误率 ϵ ^ \hat\epsilon ϵ^ 意味着在m个测试样本中恰有 ϵ ^ ∗ m \hat\epsilon*m ϵ^m个被误分类。

虽然 ϵ \epsilon ϵ未知,但我们可以用 ϵ ^ \hat\epsilon ϵ^ 检验我们的猜想。这是因为 ϵ ^ \hat\epsilon ϵ^在一定程度上反应了 ϵ \epsilon ϵ的大小。泛化错误率为 ϵ \epsilon ϵ的学习器被测的测试错误率为 ϵ ^ \hat\epsilon ϵ^ 的概率:
P( ϵ ^ \hat{\epsilon} ϵ^; ϵ \epsilon ϵ)= ( m ϵ ^ ∗ m ) ϵ ϵ ^ ∗ m ( 1 − ϵ ) m − ϵ ^ ∗ m \dbinom{m}{\hat\epsilon*m}\epsilon^{\hat\epsilon*m}(1-\epsilon)^{m-\hat\epsilon*m} (ϵ^mm)ϵϵ^m(1ϵ)mϵ^m

由此我们可以证明出 ϵ ^ \hat\epsilon ϵ^ ϵ \epsilon ϵ的无偏估计,证明如下,其中 i = ϵ ^ ∗ m i=\hat\epsilon*m i=ϵ^m。这就说明,如果 ϵ ≤ ϵ 0 \epsilon\le\epsilon_0 ϵϵ0,那么 ϵ ^ \hat\epsilon ϵ^ 在大概率上也小于 ϵ 0 \epsilon_0 ϵ0而在小概率上远大于 ϵ 0 \epsilon_0 ϵ0.。

在这里插入图片描述
设检验的基本原理是小概率原理,即“概率很小的事件在一次试验中可认为几乎不会发生”。因此,如果" ϵ ^ \hat\epsilon ϵ^远大 ϵ 0 \epsilon_0 ϵ0 "这个小概率事件发生,我们就认为假设不对。但问题是, ϵ ^ \hat\epsilon ϵ^需要大于多少我们才能怀疑我们的假设不对?

在这里插入图片描述
使用二项检验(binomial test),假设泛化错误率 ϵ ≤ ϵ 0 \epsilon \leq \epsilon_0 ϵϵ0,并且设定置信度为 1 − α 1-\alpha 1α。则在 ϵ ≤ ϵ 0 \epsilon \leq \epsilon_0 ϵϵ0的概率内所能观测到的最大错误率 ϵ ‾ \overline{\epsilon} ϵ如下式计算。

在这里插入图片描述
其中 s.t. 是"subject to" 的简写,使左边式子在右边条件满足时成立。右式计算的是发生不符合假设的事件的总概率,如果我们要有 1 − α 1-\alpha 1α的把握认为假设成立,那么发生不符合假设的事件的总概率就必须低过 α。

在满足右式的所有 ϵ 中,选择最大的作为阈值 ϵ ‾ \overline{\epsilon} ϵ 。如果在测试集中观测到的测试错误率 ϵ ^ \hat{\epsilon} ϵ^是小于阈值 ϵ ‾ \overline{\epsilon} ϵ我们就能以1−α 的把握认为假设成立,即该模型的泛化误差 ϵ ≤ ϵ 0 \epsilon \leq \epsilon_0 ϵϵ0

1.2 t检验

二项检验只用于检验某一次测试的性能度量,但实际任务中我们会进行多次的训练/测试,得到多个测试错误率,比方说进行了k次测试,得到 ϵ ^ 1 \hat{\epsilon}_1 ϵ^1 , ϵ ^ 2 \hat{\epsilon}_2 ϵ^2, … , ϵ ^ k \hat{\epsilon}_k ϵ^k 。此时就会用到t检验(t-test)

定义这 k 次测试的平均错误率 μ \mu μ 和方差 σ 2 \sigma^2 σ2

μ = 1 k ∑ i = 1 k ϵ ^ i \mu=\frac{1}{k}\sum_{i=1}^k\hat{\epsilon}_i μ=k1i=1kϵ^i

σ 2 = 1 k − 1 ∑ i = 1 k ( ϵ ^ i − μ ) 2 \sigma^2=\frac{1}{k-1}\sum_{i=1}^k(\hat{\epsilon}_i-\mu)^2 σ2=k11i=1k(ϵ^iμ)2

注意!这里使用的是无偏估计的样本方差,分母是 k−1,因为当均值确定,并且已知k−1 个样本的值时,第 k 个样本的值是可以算出来的,也可以说是受限的。

假设泛化错误率 ϵ = ϵ 0 \epsilon = \epsilon_0 ϵ=ϵ0,并且设定显著度为 α \alpha α。计算统计量t:

t = k ( μ − ϵ 0 ) σ t=\frac{\sqrt k(\mu- \epsilon_0)}{\sigma} t=σk (μϵ0)

​该统计量服从自由度 v=k−1 的t分布,如下图:

在这里插入图片描述
如果计算出的t统计量落在临界值范围 [ t − α / 2 , t α / 2 ] [t_{-\alpha/2},t_{\alpha/2}] [tα/2,tα/2] 之内(注:临界值由自由度 k和显著度 α \alpha α 决定,通过查表得出),我们就能以 1 − α 1-\alpha 1α的把握认为假设成立,即该模型的泛化误差 ϵ = ϵ 0 \epsilon = \epsilon_0 ϵ=ϵ0

2、两个模型/算法、单个数据集上的泛化性能检验

我们有多大把握相信两个模型的泛化性能无显著差别?

2.1 交叉验证t检验

对两个模型A和B,各使用k折交叉验证分别得到k个测试错误率,即 ϵ ^ 1 A \hat{\epsilon}_1^A ϵ^1A , ϵ ^ 2 A \hat{\epsilon}_2^A ϵ^2A, … , ϵ ^ k A \hat{\epsilon}_k^A ϵ^kA ϵ ^ 1 B \hat{\epsilon}_1^B ϵ^1B , ϵ ^ 2 B \hat{\epsilon}_2^B ϵ^2B , … , ϵ ^ k B \hat{\epsilon}_k^B ϵ^kB ,其中 ϵ ^ i A \hat{\epsilon}_i^A ϵ^iA ϵ ^ i B \hat{\epsilon}_i^B ϵ^iB是在相同的第i折训练集上得到的结果,则可以用k折交叉验证成对t检验(paired t-tests) 来进行比较检验。

原假设:

两个模型A和B的性能没有显著差异

统计量:

对于这两组k个个测试错误率,计算两组之间的每一对的差,即

△ i = ϵ ^ i A − ϵ ^ i B \triangle_i = \hat{\epsilon}_i^A - \hat{\epsilon}_i^B i=ϵ^iAϵ^iB,
从而得到k个 △ \triangle 。我们可以计算 △ \triangle 的均值 μ \mu μ 和方差 σ 2 \sigma^2 σ2
定义统计量t:

t = ∣ k μ σ ∣ t= \lvert \frac{\sqrt{k}\mu}{\sigma} \rvert t=σk μ

结论:

如果统计量t小于 t α / 2 , k − 1 t_{\alpha/2,k-1} tα/2,k1,则不拒绝原假设,即认为两个模型A和B的性能没有显著差异。

通常情况下,由于样本有限,在使用交叉验证等实验估计方法时,不同轮次的训练集会有一定程度的重叠,这就使得测试错误率实际上并不独立会导致过高估计假设成立的概率。为了解决此问题,可以使用5*2交叉验证法。

K折交叉验证法的改进5*2交叉验证法

5*2交叉验证是做5次2折交叉验证,在每次2折交叉验证之前随机将数据打乱,使得5次交叉验证中的数据划分不重复。对两个学习器A和B,第i次2折交叉验证将产生两对测试错误率,我们对它们分别求差,得到第1折上的差值 △ i 1 \triangle_i^1 i1和第二折上的差值 △ i 2 \triangle_i^2 i2.。为缓解测试错误率的非独立性,我们仅计算第一次2折交叉验证的两个结果的平均值

μ \mu μ=0.5( △ 1 1 \triangle_1^1 11 + △ 1 2 \triangle_1^2 12 ),

但对每次2折实验的结果都计算出其方差

σ 2 = \sigma^2= σ2=( △ i 1 \triangle_i^1 i1- △ i 1 + △ i 2 2 ) 2 + \frac{\triangle_i^1+\triangle_i^2}{2})^2+ 2i1+i2)2+( △ i 2 \triangle_i^2 i2- △ i 1 + △ i 2 2 ) 2 \frac{\triangle_i^1+\triangle_i^2}{2})^2 2i1+i2)2

原假设:

两个模型A和B的性能没有显著差异

统计量:

t = μ 0.2 ∑ i = 1 5 σ i 2 t=\frac{\mu}{\sqrt {0.2\sum_{i=1}^5}\sigma_i^2} t=0.2i=15 σi2μ

结论:

如果统计量t小于 t α / 2 , 5 t_{\alpha/2,5} tα/2,5,则不拒绝原假设,即认为两个模型A和B的性能没有显著差异。

2.2 McNemar检验

对于一个二分类问题,如果使用留出法,我们不仅可以获得两个算法A和B各自的测试错误率,还可以获得它们分类结果的差别(都预测正确、都预测错误、一个预测正确一个预测错误),构成一张列联表(contingency table):

在这里插入图片描述
假设两个算法的泛化性能无显著区别,则 e 01 = e 10 e_{01}=e_{10} e01=e10,变量 ∣ e 01 − e 10 ∣ \lvert e_{01}-e_{10} \rvert e01e10应服从均值为 1,方差为 e 01 + e 10 e_{01} + e_{10} e01+e10的正态分布,可以计算统计量 χ 2 \chi^2 χ2

χ 2 = ( ∣ e 01 − e 10 ∣ − 1 ) 2 e 01 + e 10 \chi^2=\frac{(\lvert e_{01}-e_{10} \rvert-1)^2}{e_{01} + e_{10}} χ2=e01+e10(e01e101)2

该变量服从自由度为 v=1 的 χ 2 \chi^2 χ2分布(卡方分布)

原假设:

两个模型A和B的性能没有显著差异

统计量:

χ 2 = ( ∣ e 01 − e 10 ∣ − 1 ) 2 e 01 + e 10 \chi^2=\frac{(\lvert e_{01}-e_{10} \rvert-1)^2}{e_{01} + e_{10}} χ2=e01+e10(e01e101)2

结论:

如果统计量 χ 2 \chi^2 χ2小于 χ α 2 \chi^2_{\alpha} χα2,则不拒绝原假设,即认为两个模型A和B的性能没有显著差异。

3、多个模型/算法、多个数据集上的泛化性能检验

我们有多大把握相信多个模型的泛化性能皆无显著差别?若有,接下来怎样做?

在一组数据集上进行多个算法的比较,情况就变得较复杂了,一种做法是使用前面的方法分开两两比较;另一种更直接的做法是使用基于算法排序的Friedman检验。

3.1 Friedman检验

假设有 N=4个数据集,k=3算法,可以使用一种评估方法,获得各个算法在各个数据集上的测试结果,然后按照性能度量由好到坏进行排序,序值为1,2,3。若并列,则取序值的平均值。然后对各个算法在各数据集上的序值求平均得到平均序值,如:

数据集算法A算法B算法C
D1123
D212.52.5
D3123
D4123
平均序值12.1252.875

假定我们在N个数据集上比较k个算法,令 r i r_i ri 表示第 i个算法的平均序值,则 r i r_i ri服从均值为 k + 1 2 \frac{k+1}{2} 2k+1 ,方差为 k 2 − 1 12 \frac{k^2-1}{12} 12k21 的正态分布。可以计算统计量 χ 2 \chi^2 χ2 :

T χ 2 = 12 N k ( k + 1 ) ( ∑ i = 1 k r i 2 − k ( k + 1 ) 2 4 ) T_{\chi^2}=\frac{12N}{k(k+1)}(\sum_{i=1}^kr_i^2-\frac{k(k+1)^2}{4} ) Tχ2=k(k+1)12N(i=1kri24k(k+1)2)

在 k 和 N 都较大时(通常要求 k>30),该变量服从自由度为 v=k−1的 χ 2 \chi^2 χ2 分布(卡方分布)。

以上这种检验方式也称为原始Friedman检验,被认为过于保守,现在通常用统计量 T F T_F TF 代替:

T F = ( N − 1 ) T χ 2 N ( K − 1 ) − T χ 2 T_F=\frac{(N-1)T_{\chi^2}}{N(K-1)-T_{\chi^2}} TF=N(K1)Tχ2(N1)Tχ2

T F T_F TF统计量服从自由度为(k-1)和(k-1)(N-1)的F分布。

原假设:

所有算法的性能相同

统计量:

T F = ( N − 1 ) T χ 2 N ( K − 1 ) − T χ 2 T_F=\frac{(N-1)T_{\chi^2}}{N(K-1)-T_{\chi^2}} TF=N(K1)Tχ2(N1)Tχ2

结论:

如果统计量 T F T_F TF小于 F α ( k − 1 , ( k − 1 ) ( N − 1 ) ) F_{\alpha(k-1,(k-1)(N-1))} Fα(k1,(k1)(N1)),则不拒绝原假设,即所有算法的性能相同

但如果这个假设被拒绝了呢?这时就需要进行后续检验(post-hoc test),常用的有 Nemenyi后续检验。

3.2 Nemenyi后续检验

定义平均序值差别的临界值域为:

C D = q α k ( k + 1 ) 6 N CD=q_{\alpha}\sqrt {\frac{k(k+1)}{6N}} CD=qα6Nk(k+1)

若两个算法的平均序值之差不超过CD,则能以 1 − α 1-\alpha 1α 的把握认为这两个算法的泛化性能无显著区别,否则认为平均序值较小的更胜一筹。

4、偏差—方差分解

偏差——方差分解是解释学习算法泛化性能的一种重要工具。偏差—方差分解同时也对如何在模型的拟合能力和复杂度之间取得一个较好的平衡?这个问题提供了一个很好的分析和指导。

对测试样本 x x x,令 y D y_D yD x x x在数据集中的标记, y y y x x x的真实标记, f ( x ; D ) f(x;D) f(x;D)为训练集D上学得模型 f f f x x x上的预测输出。

以回归任务为例,

1、学习算法的期望预测为:

f ˉ ( x ) = E D [ f ( x ; D ) ] \bar{f}(x)=E_D[f(x;D)] fˉ(x)=ED[f(x;D)]

2、使用样本数相同的不同训练集产生的方差:

v a r ( x ) = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] var(x)=E_D[(f(x;D)-\bar{f}(x))^2] var(x)=ED[(f(x;D)fˉ(x))2]

3、噪声:

ϵ 2 = E D [ ( y D − y ) 2 ] \epsilon^2=E_D[(y_D-y)^2] ϵ2=ED[(yDy)2]

4、偏差:期望输出与真实标记的差别称为偏差

b i a s 2 ( x ) = ( f ˉ ( x ) − y ) 2 bias^2(x)=(\bar{f}(x)-y)^2 bias2(x)=(fˉ(x)y)2

5、假定噪声期望为0,即 E D [ y D − y ] = 0 E_D[y_D-y]=0 ED[yDy]=0

对学习算法的期望泛化误差进行拆解,最终会发现能拆解为三个项:

在这里插入图片描述
详细推导
于是,
在这里插入图片描述
依次对应于偏差(bias)、方差(variance)、噪声(noise),也就是说泛化误差可分解为偏差、方差与噪声之和。

这三者的含义是这样的:

  • 偏差:度量了学习算法的期望预测与真实结果的偏离程度,即刻画学习算法本身的拟合能力;

  • 方差:度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;

  • 噪声:表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度;

偏差—方差分解说明,泛化性能是由学习算法的拟合能力,数据的充分性以及学习任务本身的难度共同决定的。 给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,且使方差较小,即使得数据扰动产生的影响小。

但是这两者其实是有冲突的,这称为偏差-方差窘境(bias-variance dilemma)。给定学习任务,假定我们能控制学习算法的训练程度(如决策树可控制层数,神经网络可控制训练轮数等),则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以便学习器产生显著变化,此时偏差主导了泛化错误率; 随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率; 在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。

泛化误差与偏差、方差的关系示意图如下:
在这里插入图片描述

注意,将泛化性能完美地分解为方差、偏差、噪声这三项仅在基于均方误差的回归任务中得以推导出,分类任务由于损失函数的跳变性导致难以从理论上推导出分解形式,但已经有很多方法可以通过实验进行估计了。

参考资料:
1、《机器学习》,周志华 著。即西瓜书。
2、南瓜书,是西瓜书的辅助,对西瓜书的一些公式的推导进行进行了一些详解。
3、https://blog.csdn.net/TeFuirnever/article/details/96279049

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值