📐 Friedman检验 & Nemenyi后续检验 — 公式与原理

用于比较多于两个算法在多个数据集上的性能。Friedman检验判断算法间是否存在整体差异,若显著则通过Nemenyi后续检验确定具体哪些算法对存在显著差异。

Friedman统计量

\(\chi_F^2 = \frac{12N}{k(k+1)} \left[ \sum_{j=1}^{k} R_j^2 - \frac{k(k+1)^2}{4} \right]\)

Friedman的F统计量(更精确)

\(F_F = \frac{(N-1)\chi_F^2}{N(k-1) - \chi_F^2}\)
Nemenyi临界差异
\(CD = q_{\alpha,k,\infty} \sqrt{\frac{k(k+1)}{6N}}\)
平均排名
\(R_j = \frac{1}{N} \sum_{i=1}^{N} r_i^j\)
原假设
\(H_0:\) 所有算法性能相同
分布
\(\chi_F^2 \sim \chi^2(k-1)\),\(F_F \sim F(k-1, (k-1)(N-1))\)

📖 公式参数说明

k算法数量(至少为2)
N数据集数量(或交叉验证折数)
rij第j个算法在第i个数据集上的排名(1为最好)
Rj第j个算法的平均排名
qα,k,∞学生化极差分布的上α分位数(查表)
χF²Friedman卡方统计量
FFFriedman的F统计量,在小样本时更准确
CD临界差异,用于成对比较平均排名

🎛️ 交互模拟实验室

设置算法数量、数据集数量、显著性水平以及算法间的性能差异程度,点击“生成数据”即可模拟多算法在多个数据集上的排名并进行统计检验。

📊 算法数量 k
📚 数据集数量 N
🎯 显著性水平 α
⚖️ 算法间性能差异程度 (越大差异越明显)
差异 0.15
🔊 噪声水平 (数据扰动)
噪声 0.10
📊 算法平均排名与临界差异图(CD图)
🧮 检验结果摘要

💡 深入理解Friedman检验与Nemenyi后续检验

📋标准介绍

Friedman检验是一种非参数统计检验,用于比较多个相关样本的差异。在机器学习中,当我们需要比较多个算法(k>2)在多个数据集(N个)上的性能时,每个数据集都给出了所有算法的性能度量。对于每个数据集,我们将算法按性能排序,赋予排名1到k(最佳为1,最差为k,如果并列则取平均排名)。Friedman检验基于这些排名判断所有算法的性能是否相同。原假设是“所有算法性能相同”,备择假设是“至少有一个算法与其他算法不同”。检验统计量基于各算法的平均排名与期望排名的偏差,近似服从卡方分布(或更精确地服从F分布)。如果拒绝原假设,则需要使用后续检验(如Nemenyi检验)来确定哪些算法对之间存在显著差异。Nemenyi检验通过计算一个临界差异(CD),当两个算法的平均排名之差超过CD时,认为它们之间的差异在统计上显著。

🗣️通俗介绍

想象你举办了一场厨艺比赛,邀请了多位厨师(算法)制作菜肴,并请多位评委(数据集)打分。每道菜由评委给出排名(1最好,2次之,以此类推)。你收集所有评委的排名后,想知道这些厨师的厨艺是否真的有好坏之分,还是大家都差不多。Friedman检验就像一位公正的统计员,他分析所有排名,判断厨师之间的差异是否大到不可能是随机造成的。如果他说“有差异”,你还需要进一步看看到底哪些厨师之间有显著差距。Nemenyi检验就是那位后续裁判,他给出一个“最小显著差距”的尺子(CD),如果两位厨师的排名差距超过这把尺子,就认为他们确实是水平不同。

🎯解决了什么问题

当比较两个算法时,我们可以使用t检验、Wilcoxon符号秩检验或McNemar检验。但当算法多于两个时,直接进行所有两两比较会导致多重比较问题,增加I类错误(假阳性)。Friedman检验是整体检验,它一次性判断所有算法之间是否存在任何差异,控制了整体的I类错误。如果整体检验显著,再使用后续检验(如Nemenyi)进行成对比较,并在多重比较框架下调整临界值。这样既提高了检验功效,又保证了结果的可靠性。此外,Friedman检验基于排名而非原始性能值,因此对数据的分布假设较少,对异常值不敏感,适用于不同数据集上性能尺度不同的情况(例如一个数据集准确率在0.7左右,另一个在0.9左右,直接比较原始值可能不合适,但排名是统一的)。

⭐为什么重要

在机器学习研究中,我们经常需要比较多种算法或模型的性能。简单地根据平均准确率排序可能具有误导性,因为性能差异可能只是由数据集的随机波动造成的。Friedman检验提供了一种严格的统计框架来评估这些差异是否显著,它已经成为机器学习社区广泛接受的标准方法。许多顶级会议和期刊的论文都要求使用Friedman检验和Nemenyi后续检验来报告多个算法的比较结果。这种方法不仅适用于分类算法的比较,也适用于回归、聚类等任务,只要能够为每个数据集上的算法赋予合理的排名即可。

🔧应用场景

  • 算法基准测试:在多个标准数据集上比较多个分类器(如SVM、随机森林、神经网络等)的性能;
  • 模型选择与超参数调优:比较不同超参数配置或不同模型架构的性能;
  • 特征选择方法评估:比较不同特征子集对分类器性能的影响;
  • 数据预处理策略对比:比较不同的数据清洗、归一化、增强等方法;
  • 领域应用研究:在医学影像分析、自然语言处理、推荐系统等领域中比较多种方法的有效性。

⚠️缺陷与局限

  • 排名信息损失:只使用排名,忽略了性能值之间的实际差距大小,可能降低检验功效;
  • 假设排名独立:每个数据集上的排名应独立产生,如果数据集之间存在相关性(如来自同一来源),可能影响检验准确性;
  • Nemenyi检验保守性:Nemenyi检验的临界差异基于所有算法两两比较,当算法数量较多时可能过于保守,导致不易发现显著差异;
  • 对并列处理敏感:当多个算法性能接近时,排名并列的处理方式会影响统计量;
  • 小样本问题:当数据集数量N较小时,卡方近似可能不准确,应使用精确分布或F分布校正;
  • 未考虑数据集难度差异:所有数据集权重相同,但在实际中某些数据集可能更具代表性或更难,可考虑加权排名。