一个数据集、单个算法
一次留出法----二项检验
m个样本的测试集上,泛化错误率为ϵ的学习器被测得测试错误率为ϵ^的概率是:
P(ϵ^;ϵ)=(mc^×m)ϵe^×m(1−ϵ)m−e^×m
服从二项分布,可使用“二项检验”进行检验。
多次重复留出法或交叉验证法----t检验
多次重复留出法或者交叉验证法进行训练/测试,会得到多个测试错误率,此时可使用“t检验”。假定获得了k个测试错误率,ϵ1^、ϵ2^、ϵ3^…ϵ^k,则平均测试错误率为Xˉ和S2。
Xˉ=k1i=1∑kε^i,S2=k−11i=1∑k(ε^i−Xˉ)2
根据中心极限定理可知,
S/n(Xˉ−ε)∼t(n−1)
t分布示意图及常用双边临界值表如下所示:

一个数据集、两个算法----交叉验证t检验
对于一个数据集,两个算法A和B,使用k折交叉验证法得到的测试错误率分别为ε^iA、ε^iB(i=1,2,,,k)。可采用k折交叉验证“成对t检验”来进行检验。
基本思想是若两个算法的性能相同,则他们使用相同的训练集/测试集得到的测试错误率应相同,即ε^iA=ε^iB。
对每一组测试错误率求差值,Δi=ε^A−ε^B,若两个算法性能相同,则差值均值为零。可根据Δ1、Δ2、...Δk、进行t检验,计算出差值的均值∣Δ∣和方差S2,则:
S/k∣∣(Δˉ−(εA−εB)⟩∣∣∼t(k−1)
若假设H0:εA=εB,H1:εA=εB,则,满足S/k∣Δˉ∣≤t∂/2。
由于样本有限,在使用交叉验证等方法的时候,会导致不同轮次的训练集有一定程度的重叠,是的测试错误率不独立,导致过高估计假设成立的概率,为缓解这一问题,可采用“5次2折交叉验证”。
一组数据集、多个算法----Friedman检验与Nemenyi检验
Friedman检验
假设有数据集D1、D2、D3、D4,算法A、B、C进行比较。
使用留出法或者交叉验证得到每个算法在每个数据集上的测试结果,然后在每个数据集上根据测试性能由好到坏排序,并赋予序值1,2,…,若算法测试性能相同,则平分序值。

使用Friedman检验来判断浙西额算法是否性能相同,若相同,则它们的平均序值应当相同。
若在N个数据集,比较k个算法,令ri表示第i个算法的平均序值,则ri的均值和方差分别为(k+1)/2,(k+1)(k−1)/12,则有:
τχ2=kk−1⋅k2−112Ni=1∑k(ri−2k+1)2=k(k+1)12N(i=1∑kri2−4k(k+1)2)
在k和N比较大时,服从自由度为k-1的χ2分布。
τF=N(k−1)−τχ2(N−1)τχ2
服从自由度为k-1和(k-1)(N-1)的F分布。下面是F检验常用的临界值:

Nemenyi检验
若原假设被拒绝,则需要进行后续健谈,来得到具体的算法之间的差异。常用的是Nemenyi检验。Nemenyi检验计算出平均序值差别的临界值域,下表是常用的qa值,若两个算法的平均序值差超出了临界值域CD,则相应的置信度1−α拒绝“两个算法性能本相同”的假设。
CD=qα6Nk(k+1)
qa中常用的联临界值:

链接
https://blog.****.net/qqMiSa/article/details/98660515