4: 比较检验
- 有了实验评估方法和性能度量,是直接取的性能度量的值然后比较大小吗?实际上,机器学习中性能比较这件事要复杂的多,原因有三:我们能获取的是测试性能,而我们想要的是泛化性能;测试集性能和选择的测试集有很大的关系,不同的测试集会导致不同的结果;机器学习算法本身有一定的随机性;我们一般使用统计假设检验来进行学习器性能比较。
4.1 :t 检验
- 假设我们通过重复留出发或交叉验证法等进行了多次训练、测试,得到K个测试错误率,使用t检验方法:
μ
=
1
k
∑
i
=
1
k
ϵ
i
\mu =\frac{1}{k}\sum_{i=1}^{k}\epsilon _{i}
μ=k1i=1∑kϵi
∂
2
=
1
k
−
1
∑
i
=
1
k
(
ϵ
i
−
μ
)
2
\partial ^{2}=\frac{1}{k-1}\sum_{i=1}^{k}\left ( \epsilon _{i}-\mu \right )^{2}
∂2=k−11i=1∑k(ϵi−μ)2
k 个测试错误率可看作泛化错误率 ε 0 \varepsilon _{0} ε0,则变量服从k-1的t分布:
τ t = k ( μ − ϵ 0 ) σ \tau _{t}=\frac{\sqrt{k}\left ( \mu -\epsilon _{0} \right )}{\sigma } τt=σk(μ−ϵ0)
上面的方法只适用于单个学习器泛化性能的假设检验,对于两个学习器,则使用成对t检验,基本思想为若两个学习器的性能相同,则它们使用相同的训练集/测试集得到的测试错误率也相同。成对t检验步骤如下:先对每对结果求差;计算出差值的均值和方差。
τ t = k μ σ \tau _{t}=\frac{\sqrt{k}\mu }{\sigma } τt=σkμ
4.2: Friendman检验和Nemenyi后续检验
- 交叉验证t检验是在一个数据集上比较两个算法的性能,但有时我们需要在一组数据集上对多个算法进行比较,可以使用基于算法排序的Friendman检验。
我们假设D 1 _{1} 1、D 2 _{2} 2、D 3 _{3} 3、D 4 _{4} 4四个数据集对算法A、B、C进行比较,首先使用留出发或交叉验证法得到每个算法在每个数据集上的测试结果,然后在每个数据集上根据测试性能由好到坏进行排序,赋予序值1,2,…;若算法的测试性能相同,则平分序值,然后使用Friendman检验判断这些算法是否性能相同。若相同,则它们的平均序值相同,否则不相同。我们假设在N个数据集上比较K个算法,令r i _{i} i 表示第i个算法的平均序值,则r i _{i} i 服从正太分布,其均值和方差分别为(k+1)/2和 ( k 2 − 1 ) / 12 \left ( k^{2}-1 \right )/ 12 (k2−1)/12,变量 τ χ 2 = 12 N k ( k + 1 ) ( ∑ i = 1 k r 2 i − k ( k + 1 ) 2 4 ) \tau _{\chi ^{2}}=\frac{12N}{k\left ( k+1 \right )}\left ( \sum_{i=1}^{k}r\tfrac{2}{i}-\frac{k\left ( k+1 \right )^{2}}{4} \right ) τχ2=k(k+1)12N(i=1∑kri2−4k(k+1)2)
在k和N都比较大时,服从自由度为k-1的 χ 2 \chi ^{2} χ2分布。原始的Friendman检验过于保守,现在通常使用变量 τ F = ( N − 1 ) τ x 2 N ( k − 1 − τ x 2 ) \tau _{F}=\frac{\left ( N-1 \right )\tau _{x^{2}}}{N\left ( k-1 -\tau _{x^{2}}\right )} τF=N(k−1−τx2)(N−1)τx2
τ F \tau _{F} τF服从自由度为k-1和(k-1)(N-1)的F分布。若“所有算法的性能相同”这个假设被拒绝,说明算法的性能显著不同,需要进行后续检验来进一步区分各算法,常用的有Nemenyi后续检验。Nemenyi检验计算出平均序值差别的临别值域:
C D = q α k ( k + 1 ) 6 N CD=q_{\alpha }\sqrt{\frac{k\left ( k+1 \right )}{6N}} CD=qα6Nk(k+1)
q α _{\alpha } α可由表查出,若两个算法的平均序值之差超过了临界值域CD,则以相应的置信度拒绝“两个算法性能相同”的假设。