Friedman test以及后续检验Nemenyi test和Bonferroni-Dunn test

题目:Friedman test以及后续检验Nemenyi test和Bonferroni-Dunn test

在做算法对比时,往往需要对实验结果进行统计检验。Friedman test是一种常用的检验,用来比较k个算法在N个数据集上的整体表现性能。但Friedman test只能给出k个算法的性能之间是否存在差异的结论,如果存在差异,还需要进行“后续检验”(post-hoc test),以得出哪些算法的性能之间存在统计上的差异,常用的后续检验方法包括Nemenyi test和Bonferroni-Dunn test。

Nemenyi test适用于对比k个算法相互之间的性能(when all classifiers are compared to each other),而Bonferroni-Dunn test适用于将某个算法与其余k-1个算法对比(when all classifiers are compared with a control classifier),二者都是将各个算法平均排名之差与某域值(critical difference, CD)对比,若大于该域值则说明平均排名高的算法统计上优于平均排名低的算法,反之则二者统计上没有差异。

这个域值CD的计算方式如下:

                                                     CD = q_{\alpha} \sqrt{\frac{k(k+1)}{6N}}

其中,k为参加对比的算法个数,N为数据集个数,常用的q_{\alpha}值可通过下表查得,其中表(a)对应Nemenyi test,表(b)对应Bonferroni-Dunn test,#classifiers为算法个数k:

这里重点想谈的是这种统计检验方法存在的问题,注意到由上面公式计算出来的q_{\alpha}一般都大于1,这意味着什么呢?如果在所有数据集上,你所提出的算法一直排名第一,几个对比算法分别一直排名第二、第三、第四……,很明显你所提出的算法优于所有对比算法(就好像你每次考试都是班级第一,肯定比每次都考班级第二的同学优秀,每次考试则对应这里的一个数据集);但是,你所提出的算法与一直排名第二的算法平均排名之差只有1,会小于q_{\alpha},表示二者没有显著差别,这明显有悖于常理。也就是说,这种统计检验方法不仅要求你自己的算法在每个数据集上的排名要靠前,还要求其它对比算法在每个数据集上的排名随机的比较差,这样才能保证对比算法的平均排名都比较低,进而保证你自己的算法与对比算法的平均排名之差大于域值CD。

为了直观起见,我们来计算一下q_{\alpha},看看当数据集个数N大概取多少个时CD值才会小于1。一般来说,论文中对比算法选4到5个,加上我们自己所提的算法k的取值就是5或6,我们计算\alpha=0.05时的CD值,即查表时看q_{0.05}那一行。

k=5时:

对于Nemenyi test来说,至少要当N=38时,

                                                CD=2.728\sqrt{\frac{5 \times 6}{6 \times 38}}\approx 0.9895<1

也就是说至少要在38个数据集上做实验才能避免我说的那种悖论;

对于Bonferroni-Dunn test来说,至少要当N=32时,

                                            CD = 2.498\sqrt{\frac{5 \times 6}{6 \times 32}}\approx 0.9874<1

也就是说至少要在32个数据集上做实验才能避免我说的那种悖论;

k=6时:

对于Nemenyi test来说,至少要当N=57时,

                                           CD=2.850\sqrt{\frac{6 \times 7}{6 \times 57}}\approx 0.9987<1

也就是说至少要在57个数据集上做实验才能避免我说的那种悖论;

对于Bonferroni-Dunn test来说,至少要当N=47时,

                                           CD = 2.576\sqrt{\frac{6 \times 7}{6 \times 47}}\approx 0.9941<1

也就是说至少要在47个数据集上做实验才能避免我说的那种悖论;这里提的悖论指经过统计检验得出每次考第一的同学与每次考第二的同学没有差别的结论,因为从常理角度来看应该是每次考第一的同学比每次考第二的同学要优秀。

但实际上,一般论文中我们也就在10个到20个数据集上做实验而已(也有些文章甚至会仅在5个左右数据集上做实验),那么可以计算如下(Bonferroni-Dunn test更符合我们的应用场景,即对比我们的算法与所选的对比算法之间的关系):

k=5时,对于Bonferroni-Dunn test来说,

                                     N=10:~CD = 2.498\sqrt{\frac{5 \times 6}{6 \times 10}}\approx1.766

                                    N=20:~CD = 2.498\sqrt{\frac{5 \times 6}{6 \times 20}}\approx1.249

k=6时,对于Bonferroni-Dunn test来说,

                                   N=10:~CD = 2.576\sqrt{\frac{6 \times 7}{6 \times 10}}\approx 2.155

                                   N=20:~CD = 2.576\sqrt{\frac{6 \times 7}{6 \times 20}}\approx 1.524

可以看出,当只使用10个数据集时,这个排名之差的域值CD要求还是挺严格的;尤其是k=6N=10时,即使你的算法一直排名第1,对比算法必须平均排名大于3.155=1+2.155才表示你的算法统计上优于对比算法,而此时一共也只有k=6个算法而已啊。

针对Friedman test联合后续检验的以上这种缺陷,我感觉Wilcoxon signed rank test其实更合适于做统计检验用来对比两两之间的性能,在Matlab中可以直接调用signrank函数实现,具体就不谈了,可以查阅signrank的使用方法和以下参考文献。

参考文献(以上所有理论细节均在此文献中):

Janez Demsar,  Statistical Comparisons of Classifiers over Multiple Data Sets, In: JMLR, 2006, 7(1), 1-30.

链接:https://www.jmlr.org/papers/volume7/demsar06a/demsar06a.pdf

引用\[1\]: Friedman test是一种常用的检验,用来比较k个算法在N个数据集上的整体表现性能。它可以给出k个算法的性能之间是否存在差异的结论。\[1\] 引用\[3\]: Friedman函数(非参数检验检验矩阵X的各列是否来自于相同的总体,即检验因素A的各水平之间无显著差异。Friedman函数返回检验的p值,当检验的p值小于或等于给定的显著性水平时,应拒绝原假设,即认为X总体来自于相同的总体。\[3\] 根据引用\[1\]和\[3\]的内容,Friedman检验的值越小,表示k个算法在N个数据集上的整体表现性能之间的差异越小。当Friedman检验的p值小于或等于给定的显著性水平时,可以拒绝原假设,即认为算法之间存在显著差异。因此,Friedman检验值越小可能意味着算法之间的性能差异较小。 #### 引用[.reference_title] - *1* *2* [Friedman test以及后续检验Nemenyi testBonferroni-Dunn test](https://blog.csdn.net/jbb0523/article/details/109990924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Friedman 检验--Matlab](https://blog.csdn.net/weixin_63049819/article/details/129257633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值