python 实现 Friedman统计检验

python 实现 Friedman统计检验
在这里插入图片描述
基于此,Friedman检验F_F被定义为:在这里插入图片描述
其中,N表示数据集的数量,k表示算法个数,r^j_i表示第j个算法在第i个数据集的排名。
python代码实现如下:

import numpy as np #导入numpy

以数组形式传入需要比较的值,本例比较的是6个算法,13个数据的排名,

A= np.array([[3,2,5,6,4,1],[5,2.5,6,2.5,4,1],[5,4,6,2.5,2.5,1],[5,6,4,2,3,1],[6,3,5,2,4,1],
                      [4.5,6,2.5,2.5,4.5,1],[4,3,6,5,2,1],[2,5,3,6,4,1],[6,4.5,2,4.5,3,1],
                      [4,5,6,3,2,1],[5,4,6,2,3,1],[2,5,6,3,4,1],[3,5,2,6,4,1]])

定义Friedman函数,

def Friedman(n,k,data_matrix):
    '''
    Friedman检验 
    参数:数据集个数n, 算法种数k, 排序矩阵data_matrix
    返回值是Tf
    '''
    
    #计算每个算法的平均序值,即求每一列的排序均值
    N = data_matrix.shape[1]#查看数据形状
    rank_mean = list()
    for i in range(N):#计算平均序值
        rank_mean.append(data_matrix[:,i].mean())
    print("rank_mean:",np.round(rank_mean,2))
    sum_mean = np.array(rank_mean)#转换数据结构方便下面运算
    ## 计算总的排名和
    sum_ri2_mean = (sum_mean ** 2).sum()
    #计算Tf
    result_Tx2 = (12 * n) * (sum_ri2_mean - ((k * (k + 1) ** 2) / 4)) / (k * (k + 1))
    result_Tf = (n - 1) * result_Tx2 / (n * (k - 1) - result_Tx2)
    
    return result_Tf

调用Friedman函数,

value = Friedman(13,6,A)
print(round(value,2))

输出结果:
rank_mean: [4.19 4.23 4.58 3.62 3.38 1. ]
11.2

查看临界值

Friedman检验,服从(k-1)和(k-1)(N-1)的分布,本例中算法数为6,案例数为13时服从分布是F(5,60),其中5=6-1,60=(6-1)(13-1)。查临界值表,当alpha取值0.05时,可得Friedman检验的临界值为2.368

这里可以查看临界值的计算和表,点击跳转:添加链接描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值