[DataAnalysis]基于统计假设检验的机器学习模型性能评估——泛化误差率的统计检验

一、为什么需要统计假设检验衡量学习器性能

看起来P-R曲线和ROC曲线可以解决学习器的性能评估问题,然而机器学习中性能比较这件事情比想象中复杂得多。原因如下:

(1)我们想比价的是泛化性能,然而通过实验评估方法我们得到的是测试集上的性能

(2)测试集上的性能与测试集本身的选择有很大关系,且不论使用不同大小的测试集会得到不同的结果,即便用相同大小的测试集,若包含的测试样例不同,测试结果也会有所不同。

(3)机器学习算法本身的随机性,即便用相同的参数在相同的测试集上多次运行同一个模型,得到的模型结果也会不同。

统计假设检验为我们进行学习器性能的比较提供了重要依据。基于假设检验结果我们可推断出,若在测试集上观察到学习器A比学习器B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。

二、对泛化错误率进行假设检验的思想

泛化错误率为\epsilon的学习样本在一个样本上犯错的概率是\epsilon;测试错误率\hat{\epsilon }以为着在m个测试样本中恰有\hat{\epsilon }*m个样本被误分类。举个例子,我们可以用二项检验对“\epsilon\leqslant \epsilon_0”这样的假设进行检验。则在1-\alpha的置信度内能观测到的最大错误率如下式所示:

\bar{\epsilon}=max \epsilon      s.t.      \sum_{i=\epsilon _{0}*m+1}^{m}\epsilon _i(1-\epsilon)^{m-i}<\alpha

如果测试错误率\hat{\epsilon }小于临界值\bar\epsilon,则在\alpha的显著性水平下,假设“\epsilon\leqslant \epsilon_0”不能被拒绝。

三、多个测试错误率的统计检验

很多时候我们并非仅做一次留出法估计,通过多次重复留出或者交叉验证法进行多次训练/测试时,我们会得到多个测试错误率。

1、单个学习器的泛化误差检验(t检验)

假定我们得到了k个测试错误率,\hat{\epsilon_1},\hat{\epsilon_2},\hat{\epsilon_3},...\hat{\epsilon_k},则可以算出测试误差率的均值\mu和方差\sigma ^2。考虑到这k个测试错误率可以看作泛化错误率\epsilon_0的独立采样,则检验统计量

\tau _t=\frac{\sqrt{k}(\mu-\epsilon_0)}{\sigma}

服从自由度为k-1t分布。

2、两个学习器(交叉验证t检验)

对两个学习器A和B,若我们使用k折交叉验证法得到的测试错误率分别为\epsilon_{1}^{A},\epsilon_{2}^{A},...,\epsilon_{k}^{A},\epsilon_{1}^{B},\epsilon_{2}^{B},...,\epsilon_{k}^{B}​​​​,基本​思想是如果两个学习器性能相同,则它们使用相同的训练/测试集得到的测试错误率应该相同,即\epsilon_i^A=\epsilon_i^B。从而我们可以用成对t检验。

先对每对测试错误率结果求差,\bigtriangledown _i=\epsilon_i^A-\epsilon_i^B,然后得到差值\bigtriangledown _1,\bigtriangledown _2,...\bigtriangledown _k,计算出这些差值的均值\mu和方差\sigma ^2,在显著性水平\alpha下,则检验统计量

\tau _t=|\frac{\sqrt{k}\mu}{\sigma}|

3、McNemar检验

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

两学习器分类差别列联表
算法B 算法A
正确 错误
正确 e_{00} e_{01}
错误 e_{10} e_{11}

假设两学习器性能相同,则e_{01}=e_{10},即变量|e_{01}-e_{10}|应当服从正态分布。构造检验统计量

\tau _{\chi ^2}=\frac{(|e_{01}-e_{10}|-1)^2}{e_{01}+e_{10}}服从自由度为1的\chi ^2分布。

4、Friedman检验和Nemenyi检验

参照西瓜书。

猜你喜欢

转载自blog.csdn.net/TOMOCAT/article/details/81592733