模型评估与选择(番外1)-比较检验与偏方差分析

这里写图片描述
主要参考博客:
1.理解机器学习中的偏差与方差
2.周志华《机器学习》笔记:2、模型评估与选择
3.机器学习模型性能评估方法笔记

比较检验

前面介绍了各种性能度量方式,但是其度量的是模型在测试集下的测试误差的性能状况,虽然其可以近似代替泛化性能,但毕竟与真实的泛化性能有一定的距离,在这里我们介绍通过假设检验的方式,利用测试误差来预估泛化误差从而得到模型的泛化性能情况,即基于假设检验结果我们可以推断出若在测试集上观察到模型A比B好,那么A的泛化性能在统计意义上优于B的概率有多大

一句话:无假设不检验
牵涉到概论的知识太多,尤其是后面的各种分布(都有点忘光了,不做详细介绍)

假设检验
假设检验就是数理统计中依据一定的假设条件,由样本推断总体的一种方法。其步骤如下所示:
1. 根据问题的需要对所研究的总体做某种假设,记为 H0
2. 选取合适的统计量,这个统计量的选取要使得在假设 H0 成立时,其分布是已知的(统计量我们可以视为样本的函数)
3. 由实测的样本计算出统计量的值,根据预先给定的显著性水平进行检验,做出拒绝或接受假设 H0 的判断.根据以上三步我们知道首先我们要对所研究的总体做出某种假设,在我们所研究的问题中就是对模型泛化错误率分布做出某种假设或猜想。通常,测试错误率与泛化误差率的差别很小,因此我们可以通过测试误差率来估计泛化误差率。我们知道泛化误差率为ϵ的模型在m个样本中被测得的测试错误率为ϵ^的概率为

P(ϵ^,ϵ)=(mmϵ^)ϵϵ^m(1ϵ)mϵ^m


我们可以看到该概率的格式满足二项分布,那么 ϵ 在取什么值的时候,概率P最大?让P对 ϵ 求导后我们可以发现当 ϵ=ϵ^ 的时候,概率值是最大的,二项分布示意图如下所示:
这里写图片描述

因此,我们可以假设泛化误差率 ϵϵ0 ,那么在 1α 的概率内所能观测到的最大错误率可以通过下式计算得到:
ϵ¯=maxϵs.t.i=ϵ0m+1m(mi)ϵi(1ϵ)mi<α

大多数情况下,我们会使用多次留出或交叉验证法,因此我们会得到多组测试误差率,此时我们可以使用t检验的方式来进行泛化误差的评估。
即假定我们得到了k个测试误差率, ϵ^1,ϵ^1,...,ϵ^k ,则平均测试错误率 μ 和方差 σ2
μ=1ki=1kϵ^i

σ2=1k1i=1k(ϵ^iμ)

由于这k个测试误差率可以看做泛化误差率 ϵ0 的独立采样,因此变量 τt=k(μϵ0)σ 服从自由度为k-1的t分布。对于假设 μ=ϵ0 和显著度 α ,我们可以计算出当前错误率均值为 ϵ0 时,在 1α 概率内能观测到的最大错误率,即临界值。这样我们就可以对我们的假设做出拒绝或接受。
书中还有介绍诸如交叉验证t检验、McNemar检验、Friendman检验与Nemenyi后续检验等方法,我概论学的差,感兴趣可以自己查找资料看看。

误差方差与偏差
学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 在估计学习算法性能的过程中, 我们主要关注偏差与方差. 因为噪声属于不可约减的误差 (irreducible error).

首先抛开机器学习的范畴, 从字面上来看待这两个词:

  • 偏差
    这里的偏指的是 偏离 , 那么它偏离了什么到导致了误差? 潜意识上, 当谈到这个词时, 我们可能会认为它是偏离了某个潜在的 “标准”, 而这里这个 “标准” 也就是真实情况 (ground truth). 在分类任务中, 这个 “标准” 就是真实标签 (label).

  • 方差
    很多人应该都还记得在统计学中, 一个随机变量的方差描述的是它的离散程度, 也就是该随机变量在其期望值附近的 波动程度 . 取自维基百科一般化的方差定义:

    如果 X 是一个向量其取值范围在实数空间 Rn ,并且其每个元素都是一个一维随机变量,我我们就称 X 为随机向量。随机向量的方差是一维随机变量方差的自然推广,其定义为 E[(Xμ)(Xμ)T] ,其中 μ=E(X) , XT X 的转置.

来个靶心图:(确实很直观)
这里写图片描述

假设红色的靶心区域是学习算法完美的正确预测值, 蓝色点为每个数据集所训练出的模型对样本的预测值, 当我们从靶心逐渐向外移动时, 预测效果逐渐变差.

很容易看出有两副图中蓝色点比较集中, 另外两幅中比较分散, 它们描述的是方差的两种情况. 比较集中的属于方差小的, 比较分散的属于方差大的情况.

再从蓝色点与红色靶心区域的位置关系, 靠近红色靶心的属于偏差较小的情况, 远离靶心的属于偏差较大的情况.

有了直观感受以后, 下面来用公式推导泛化误差与偏差与方差, 噪声之间的关系.

符号 涵义
x 测试样本
D 数据集
yD x 在数据中的标记
y x 的真实标记
f 训练集 D 学得的模型
f(x;D) 由训练集 D 学得的模型 f x 的预测输出
f¯(x) 模型 f x 期望预测输出


泛化误差

以回归任务为例, 学习算法的平方预测误差期望为:

Err(x)=E[(yf(x;D))2]

方差

在一个训练集 D 上模型 f 对测试样本 x 的预测输出为 f(x;D) , 那么学习算法 f 对测试样本 x 期望预测 为:

f¯(x)=ED[f(x;D)]

上面的期望预测也就是针对 不同 数据集 D , f x 的预测值取其期望, 也被叫做 average predicted 1.

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

var(x)=ED[(f(x;D)f¯(x))2]

噪声

噪声为真实标记与数据集中的实际标记间的偏差:

ϵ2=ED[(yDy)2]

偏差

期望预测与真实标记的误差称为偏差(bias), 为了方便起见, 我们直接取偏差的平方:

bias2(x)=(f¯(x)y)2

对算法的期望泛化误差进行分解:
这里写图片描述
蓝色部分是对上面对应的等价替换, 然后对其展开后, 红色部分刚好为 0.
上述公式比较难理解的地方就是两个红颜色部分为什么为零。
解释:
第一个红色式子:可以做如下变换

2ED[(f(x;D)f¯(x))(f¯(x)yD)]=2ED[(f(x;D)f¯(x))ED[(f¯(x)yD)]

是由于噪声与f不相关(书上的话是“噪声不依赖于f”)。公式里应该是认为 f¯(x) 是一个常数,则 f¯(x)yD 是一个只与 yD 有关的变量,可以认为其代表了噪声,而前面是与 f(x;D) 相关的数,两个无关,因此可以分开。

第二个红色的式子:可以作如下变换

2ED[(f¯(x)y)(yyD)]=2ED[f¯(x)y]ED[yyD]

这里有一个问题,可以变换的原因是因为 f¯(x)y 是一个常数,还是说偏差与噪声无关?
我个人觉得应该是偏差与噪声无关
因为噪声的期望是0,所以上式最后一项为0。

对最终的推导结果稍作整理:
这里写图片描述
这个图片做的很漂亮以及生动

至此, 继续来看一下偏差, 方差与噪声的含义:

  • 偏差.
    偏差度量了学习算法的期望预测与真实结果的偏离程序, 即 刻画了学习算法本身的拟合能力 .
  • 方差.
    方差度量了同样大小的训练集的变动所导致的学习性能的变化, 即 刻画了数据扰动所造成的影响 .
  • 噪声.
    噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界, 即 刻画了学习问题本身的难度 . 巧妇难为无米之炊, 给一堆很差的食材, 要想做出一顿美味, 肯定是很有难度的.

想当然地, 我们希望偏差与方差越小越好, 但实际并非如此. 一般来说, 偏差与方差是有冲突的, 称为偏差-方差窘境 (bias-variance dilemma).

  • 给定一个学习任务, 在训练初期, 由于训练不足, 学习器的拟合能力不够强, 偏差比较大, 也是由于拟合能力不强, 数据集的扰动也无法使学习器产生显著变化, 也就是欠拟合的情况;
  • 随着训练程度的加深, 学习器的拟合能力逐渐增强, 训练数据的扰动也能够渐渐被学习器学到;
  • 充分训练后, 学习器的拟合能力已非常强, 训练数据的轻微扰动都会导致学习器发生显著变化, 当训练数据自身的、非全局的特性被学习器学到了, 则将发生过拟合.
    同样的,课本上这张图也很形象,没找到原图,就用下面这张图代替了。
    这里写图片描述