当前位置: 首页 > article >正文

机器学习之Nemenyi检验

Nemenyi检验是Friedman检验的后续分析方法,用于比较多个算法之间的两两差异。Friedman检验只能告诉我们整体上是否存在显著差异,而Nemenyi检验能够进一步确定具体哪些算法之间存在显著差异


Nemenyi检验的基本原理

Nemenyi检验是基于Friedman检验结果的多重比较方法。它是一种配对比较检验,通常用于多组数据间的成对比较。Nemenyi检验的核心是通过对所有可能的组对进行比较,检查它们之间的差异是否显著。

步骤
  1. 计算排名差异

    • 首先,Friedman检验会计算每组的排名和。然后,Nemenyi检验将计算每对算法之间的排名差异。
  2. 计算临界值

    • 对于每一对算法,计算它们之间的差异。如果差异大于一个临界值,则认为两者之间存在显著差异。
  3. 临界值的计算

    • 临界值的计算基于Friedman统计量的卡方分布,并根据样本量和组数调整。
    • 公式为: 
      • Ri和 Rj是两组的排名和。
      • k是算法的数量,N 是样本数量。
      • Q 是标准化的排名差异,用于与临界值比较。
  4. 比较

    • 将计算得到的每一对算法的Q值与临界值比较。如果Q值大于临界值,则认为这对算法之间存在显著差异。

如何进行Nemenyi检验

1. 准备数据

假设你已经通过Friedman检验得到了结果,接下来你需要对算法之间的差异进行逐一比较。

2. 计算每对算法的差异

对于每对算法,计算它们之间的排名差异,使用Nemenyi检验的公式来计算Q值。

3. 使用Python进行Nemenyi检验

Nemenyi检验没有直接的现成函数,但可以通过手动计算或使用scikit-posthocs库来实现。scikit-posthocs是一个为统计分析提供后续检验的Python库。

以下是如何进行Nemenyi检验的具体代码示例:

import numpy as np
import pandas as pd
import scikit_posthocs as sp
import scipy.stats as stats

# 示例数据:三种算法在五个数据集上的性能
algorithm1 = [0.9, 0.85, 0.87, 0.86, 0.88]
algorithm2 = [0.92, 0.89, 0.88, 0.87, 0.91]
algorithm3 = [0.88, 0.86, 0.89, 0.84, 0.85]

# 将数据转换为DataFrame格式
data = pd.DataFrame({
    'Algorithm1': algorithm1,
    'Algorithm2': algorithm2,
    'Algorithm3': algorithm3
})

# 进行Friedman检验
stat, p = stats.friedmanchisquare(algorithm1, algorithm2, algorithm3)
print(f"Friedman检验统计量: {stat}")
print(f"p值: {p}")

# 如果Friedman检验结果显著,进行Nemenyi后续检验
if p < 0.05:
    # 进行Nemenyi检验
    p_values = sp.posthoc_nemenyi_friedman(data)
    print("Nemenyi后续检验结果:")
    print(p_values)
4. 解释Nemenyi检验结果
  • posthoc_nemenyi_friedman函数返回一个对称矩阵,其中每个元素表示一对算法之间的p值。
  • 如果某个p值小于显著性水平(通常为0.05),则认为这对算法之间存在显著差异。

例如,结果矩阵可能如下所示:

           Algorithm1  Algorithm2  Algorithm3
Algorithm1        1.0        0.12        0.04
Algorithm2        0.12        1.0         0.02
Algorithm3        0.04        0.02        1.0
  • p值小于0.05:表示对应的算法对之间存在显著差异。
    • 比如,Algorithm1Algorithm3之间的p值为0.04,说明这两个算法之间的表现有显著差异。
    • 同理,Algorithm2Algorithm3之间的p值为0.02,表示它们也有显著差异。
5. Nemenyi检验的输出分析
  • 通过比较所有算法对之间的p值,可以找出哪些算法表现上存在显著差异,从而为算法选择提供依据。
  • 如果所有算法对的p值都大于显著性水平(如0.05),则说明这些算法之间没有显著差异。

总结

  • Friedman检验用于检测不同算法(或不同组)之间是否存在总体差异。
  • 如果Friedman检验结果显著,可以使用Nemenyi后续检验进一步找出哪些具体的算法对之间存在显著差异。
  • Nemenyi检验是配对比较检验,帮助我们识别不同算法之间的差异,为算法选择提供更详细的分析。

http://www.kler.cn/a/428314.html

相关文章:

  • 模型优化与迁移学习
  • [NSSRound#7 Team]ec_RCE
  • 海外的bug-hunters,不一样的403bypass
  • DR、HIS、PACS的交互,以及与其他软件系统之间的交互
  • Python学习(一)—— 编程环境安装
  • 动手学深度学习-线性神经网络-1线性回归
  • 项目搭建:springboot,mybatis, maven
  • Elasticsearch入门之HTTP基础操作
  • 【数字信号处理】Z变换,离散时间信号z变换的定义,一些常用序列的Z变换
  • node.js与npm的版本与Vue2和Vue3版本运行,nvm的使用
  • Python 在同一/或不同PPT文档之间复制幻灯片
  • 修改MySQL存储路径
  • 【目标跟踪】DUT Anti-UAV数据集详细介绍
  • 使用TCP编程实现简单登录功能
  • 城电科技|光伏廊道是什么?安装光伏廊道有什么好处?
  • Plugin - 插件开发06_开源项目JPom中的插件实现机制
  • 如何批量去除 PDF 中的特定文字?5种批量去除pdf中特定文字的方法。
  • web斗地主游戏实现指北
  • Windows环境中Python脚本开机自启动及其监控自启动
  • 机器学习—测量纯度