Fork me on GitHub

西瓜书《机器学习》学习笔记(2):比较检验与偏差方差

本篇主要介绍比较检验、偏差与方差。
其中,比较检验分为如下四类:

  • 假设检验
  • 交差验证t检验
  • McNeMar检验
  • FriedMan检验与Nemenyi后续检验

比较检验(2.4, P37)

在比较学习器泛化性能的过程中,统计假设检验(hypothesis test)为学习器性能比较提供了重要依据,即若A在某测试集上的性能优于B,那A学习器比B好的把握有多大。

假设检验(2.4.1, P38)

假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。

“假设”指的是对学习器泛化错误率分布的某种判断或猜想,如“$\epsilon = \epsilon_0 $”,现实任务中,我们并不知道学习器的泛化错误率$\epsilon$,但是可以通过测试错误率$\hat \epsilon$推算。

在包含了 m 个样本的测试集上,【泛化错误率为 $\epsilon$ 的学习器】被测得测试错误率为$ \hat \epsilon $的概率为:
$$P(\hat\epsilon;\epsilon) = \begin{pmatrix} m \\ \hat\epsilon\times m \end{pmatrix} \epsilon^{\hat\epsilon\times m}(1-\epsilon)^{m-\hat\epsilon\times m}$$

上式中的$\begin{pmatrix} m \\ \hat\epsilon\times m \end{pmatrix} $表示$C_m^{m’}$,即从m个数中任取m’个数。

这个概率,表达了【泛化错误率为 $\epsilon$ 的学习器】被测得【测试错误率】为 $\hat{\epsilon}$ 的可能性。 $\hat{\epsilon} $取0~100%。若以这个【可以测得的测试错误率$ \hat{\epsilon} $】作为自变量,以概率 $P(\hat{\epsilon};\epsilon) $为因变量,建立平面坐标图,则对于不同的测试错误率,有不同的可能性。在某点可能性越高,这个未知的【泛化错误率$ \epsilon $】和这个点代表的测试错误率的关系就越密切。

现在要找其可能性最高的点,就要对概率$ P(\hat{\epsilon};\epsilon)$ 求 $\epsilon$ 的导数,导数为0时,存在极值。

而对此概率函数求导并解出导函数等于0的式子之后,发现存在一个值 $\epsilon_0$ ,使得$P(\hat{\epsilon};\epsilon)$在$\epsilon=\epsilon_0$时最大,$|\epsilon-\epsilon_0|$ 增大时减小。整个图像其实是个山峰形状,符合二项分布。

那么此时也可以反过来讲,如果这个泛化错误率 $\epsilon$ 已知为 $\epsilon_0$ ,则理论上,横坐标为 $\epsilon_0$的概率值$P(\hat{\epsilon};\epsilon)$是最大的。

即:若泛化错误率为$ \epsilon_0$ ,则测试错误率也为 $\epsilon_0$ 的概率最大(可能性最高)

此时,我们得到了泛化错误率为$ \epsilon_0$,我们可以用这个数值来进行假设,假设这个学习器的泛化错误率不会超过 $\epsilon_0$。

即假设:“$ H_0:\epsilon≤\epsilon_0$ ”。

到底要不要接受这个假设呢?

我们需要检验一下。

显著度(显著性水平)是估计总体参数落在某一区间内,可能犯错误的概率,用$\alpha$表示。$\alpha$的常用取值很小,如0.05,0.1等。
$1-\alpha$则表示置信度(confidence)。

通过二项检验(binomial test),我们得到结论:在$\alpha$的显著度下,假设$ H_0:\epsilon≤\epsilon_0$ 不能被拒绝,能以$1-\alpha$的置信度认为,学习器的泛化错误率不大于$\epsilon_0$;否则假设被拒绝,即在$\alpha$的显著度下可认为该学习器的泛化错误率大于$\epsilon_0$。


现实中我们并非仅作出一次留出法估计,而是做多次,所以会得到不同的多个测试错误率,假定为k个测试错误率: $\hat \epsilon_1$、$\hat \epsilon_2、\cdots 、\hat \epsilon_k$,则平均错误率$ \mu $和方差$ \sigma^{2}$为:
$$\mu = \frac 1k \sum_{i=1}^k\hat \epsilon_i $$
$$ \sigma^2 = \frac{1}{k-1} \sum_{i=1}^k (\hat \epsilon_i - \mu)^2$$

假设X服从标准正态分布N(0,1),Y服从$ \chi^2$分布,那么$ T=X/\sqrt{Y/n}$ 的分布称为自由度为n的t分布,记为$T \sim t(n)$。

t分布这边需要一定的数学基础。默默记住吧。

T 为自由度为 n 的 t 分布,变量 $\tau_{t}=(\sqrt{k}(\mu-\epsilon_0))/\sigma $服从自由度为 k-1 的 t 分布。( $\mu-\epsilon_{0} $服从正态分布, $\sigma^{2} $服从自由度为 k-1 的$ \chi^2 $分布)

由此图和 t 分布图的性质可知,最高点处就是测试错误率的最大值$\epsilon_0$ 。

现在要重新假设了,“ $H_1:\mu=\epsilon_0 $”。

接下来就是继续确定显著度 $\alpha$ ,确定门槛值(此处用双边假设),最后进行在置信度为 $1-\alpha$ 下的判断了。

交叉验证 t 检验(2.4.2, P40)

回顾一下上一篇中的k折交叉验证

“k折交叉验证法”(cross validation)先将数据集D划分为k个大小相似的互斥子集,即$D=D_1\cup D_2 \cup \cdots\cup D_k,D_i \cap D_j =\oslash (i\neq j)$

如果说前一种的假设检验是得到单个学习器的泛化错误率的大致范围假设,那么“交叉验证t检验”方法就是在比较A、B两学习器性能的优劣了(不过偏向于验证A、B性能是否相同)。

现在有两个学习器A和B,使用 k 折交叉验证法得到测试错误率分别为 $\epsilon_{1}^{A},\epsilon_{2}^{A},\epsilon_{3}^{A},…\epsilon_{k}^{A}$ 和$\epsilon_{1}^{B},\epsilon_{2}^{B},\epsilon_{2}^{B},…\epsilon_{k}^{B} $。其中$ \epsilon_{i}^{A} $和 $\epsilon_{i}^{B} $是在相同的第 i 折训练/测试集上得到的结果。

注意,此时的测试错误率和之前的假设检验那一节的测试错误率采用了不同的符号,此时由于没有提到泛化错误率,测试错误率被标记为$ \epsilon $,只不过增加了上下角标,请各位不要将其与上一节的泛化错误率混淆。

基本思想:若两个学习器的性能相同,则它们使用的训练/测试集得到的测试错误率应相同,即 $\epsilon_{i}^{A}=\epsilon_{i}^{B} $。

实际上却不会像理想状态一样,两个学习器的测试错误率并不完全相同,而是存在一定的微小差值。我们想要判断两个学习器的性能是否有显著差别,就要利用这个差值进行假设检验。

若两个学习器性能相同,这个差值均值应该为0。因此可对这k个差值对“学习器A和B性能相同”这个假设做 t 检验。

1、先对每一对结果求差,$ \Delta_i=\epsilon_{i}^{A}-\epsilon_{i}^{B}$

2、计算出这$k$个差值的均值$ \mu $和方差 $\sigma^2$

3、根据 t 检验的公式$ T=X/\sqrt{Y/n} $,得 $\tau_t=|\frac{\sqrt{k}\mu}{\sigma}|$ ,满足自由度为 k-1 的 t 分布,故在显著度$ \alpha $,若其小于临界值 $t_{\alpha/2,k-1} $,则假设不能被拒绝,即认为两个学习器性能没有显著的差别。反之则认为平均错误率小的性能更优。

这里$t_{\alpha/2,k-1}$ 是分布上尾部累积分布为$\alpha/2$ 的临界值。

但是这样使用 k 折交叉验证法,通常情况下会因为样本有限,使得不同轮次的训练集产生一定程度的重叠。这样训练出来的学习器,会让得出的这组测试错误率无法做到彼此完全独立。

而进行有效的假设检验的一个重要的前提就是:测试错误率均为泛化错误率的独立采样。(例如 t 分布就需要随机变量X和Y相互独立。)

所以为了缓解这个问题,可采用“5×2交叉验证”法。

5×2交叉验证(2.4.2, P41)

待补。

McNemar检验(2.4.3, P41)

McNemar检验适用于二分类问题,与成对t检验一样也是用于比较两个学习器的性能大小。通过联列,可以获得学习器A和B的分类结果的差别。下表即为两分类器分类差别列联表, e 为样本数。

列联表

主要思想是:若两学习器的性能相同,则A预测正确B预测错误数应等于B预测错误A预测正确数,即$e_{01}=e_{10}$,且$|e_{01}-e_{10}|$符合正态分布。

$| e_{01}-e_{10}|$为什么符合正态分布?

按理说,实际生活中,凡自然状态下的整体数据分布几乎都符合正态分布,那么当假设两学习器性能相同的时候,如果用大量不同的测试集进行测试,这个差值应该就可能符合正态分布。

McNemar检验考虑变量:

McNemar检验变量

但上式中的“-1”并非因为$ |e_{01}-e_{10}| $的均值 $\mu$ 为1,实际上均值$ \mu $应近似为0,这里的“-1”,是为了连续性校正

什么是连续性校正?$2*2$列联表资料是分类资料,所以样本量较小时要进行连续性校正。。卡方检验要求:最好是大样本数据。一般每个个案最好出现一次,四分之一的个案至少出现五次。如果数据不符合要求,就要应用校正卡方。参见维基百科

上述变量$\tau_{\chi^2}$ 符合自由度为1 的$ \chi^2 $分布。

$ \chi^2 $分布的定义:若k个独立的随机变量$Z_1,Z_2,⋯,Z_k$,且符合标准正态分布$N(0,1)$,则这k个随机变量的平方和 $X=∑_{i=1}^kZ^2_i$为服从自由度为k的卡方分布,记为: $X\sim \chi^2(k)$。
卡方分布的期望与方差分为为:
$E(\chi^2)=k,D(\chi^2)=2k$,其中k为卡方分布的自由度。

给定显著度$\alpha $,当上述变量小于临界变量值的时候,不能拒绝假设,即认为两学习器的性能没有显著差别;否则拒绝假设,即认为两者性能有显著差别,平均错误率较小的学习器性能较好。这个过程也是自由度为1 的卡方检验。

$\chi^2 $检验,中文名为卡方检验。卡方检验是一种用途很广的计数资料的假设检验方法。它属于非参数检验的范畴,主要是比较两个及两个以上样本率( 构成比)以及两个分类变量的关联性分析。其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题。

Friedman检验与Nemenyi后续检验(2.4.4, P42)

上述的三种检验(假设检验、交叉验证t检验,McNemar检验)都只能在一组数据集上,Friedman检验则可以在多组数据集进行多个学习器性能的比较,基本思想是在同一组数据集上,根据测试结果(例:测试错误率)对学习器的性能进行排序,赋予序值1,2,3…,相同则平分序值,如下图所示:

比如:D1数据集上,算法A的性能最好,其次算法B的性能,最差的是算法C的性能。
数字越小,代表该算法在该数据集上的表现越好。

Friedman检验:判断算法是否性能都相同。 检验变量$\tau_{\chi^2}$与F检验的临界值进行比较。

“H0:所有算法的性能相同”这个假设被拒绝,则需要进行后续检验(post-hoc test),来得到具体的算法之间的差异。常用的就是Nemenyi后续检验

Nemenyi检验计算出平均序值差别的临界值域若两个算法的平均序值差超出了临界值域CD,则相应的置信度1-α拒绝“两个算法性能相同”的假设

总结一下多学习器的比较:

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

关于读音:(音译,仅供参考)
McNemar:mac呢嘛儿(mac:[mæk],中文名:麦克尼马尔)
Friedman:free的们(free:[fri],中文名:弗里德曼)
Nemenyi:呢曼里(y貌似不发音)

偏差与方差(2.5, P44)

“偏差-方差分解”(bias-variance decomposition)是解释学习算法泛化性能的重要工具。

  • 测试样本:x
  • 测试样本x在数据集中的标记: $y_D$
  • 测试样本x的真实标记: y
  • 训练集: D
  • 从训练集 D 上学得的模型f
  • 模型 f 在测试样本x上的预测输出$f(x;D) $

根据上述变量,推导出学习算法的期望预测:
$$\bar f(x) = \mathbb{E}_D [f(x;D)] $$
使用样本数相同的不同训练集产生的方差为:度量了同样大小的训练集的变动所导致的学习性能的变化,也就是数据扰动所造成的影响
$$var(x) = \mathbb{E}_D [(f(x;D)- \bar f (x) )^2] $$

噪声(数据集标记和真实标记的方差)为:当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度
$$ \varepsilon^2 = \mathbb{E}_D [(y_D - y)^2]$$

Bias(偏差):期望输出与真实标记的偏离程度,刻画了学习算法本身的拟合能力
$$bias^2(x) = (\bar f (x) - y)^2 $$

对回归任务,泛化误差可通过“偏差-方差分解”拆解为:
$$E(f;D) = bias^2(x) + var(x) + \varepsilon^2 $$

也就是说,泛化误差可分解为 偏差、方差与噪声之和
偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的

一般来说,偏差与方差是由冲突的,这称为“偏差-方差窘境”。
偏差-方差窘境

随着训练程度的提升,期望预测值与真实值之间的差异越来越小,即偏差越来越小,但是另一方面,随着训练程度加大,学习算法对数据集的波动越来越敏感,方差值越来越大。换句话说:在欠拟合时,偏差主导泛化误差,而训练到一定程度后,偏差越来越小,方差主导了泛化误差。因此训练也不要贪杯,适度辄止。

参考

------ 本文结束感谢您的阅读 ------
坚持原创技术分享,您的支持将鼓励我继续创作!