软件开发工程师修炼中|

【随笔-论文记录】Friedman检验代码实现(Python)

实验中的Friedman检验方法代码实现,代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# def friedman(n,k,rank_matrix):
#     sumr = sum(list(map(lambda x:np.mean(x) ** 2, rank_matrix.T)))
#     result = 12 * n / (k * (k + 1)) * (sumr - k * (k + 1) ** 2 / 4)
#     result = (n - 1) * result / (n * (k - 1) - result)
#     return result
def friedman(n,k,data_matrix): #n:数据集 k:算法个数,data是csv格式,n行k列
    hang, lie = data_matrix.shape
    print(hang)
    print(lie)
    print(data_matrix)
    data_matrix = data_matrix.values
    XuZhi_mean = list()
    for i in range(lie):
        print(data_matrix[:,i])
        XuZhi_mean.append(data_matrix[:,i].mean())
    print(XuZhi_mean) #这里输出平均序值
    sum_mean = np.array(XuZhi_mean)

    sum_ri2_mean = (sum_mean ** 2).sum()

    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

#用法
result = friedman(n,k,data_matrix) 

算法间是否存在显著性差异需要将result与临界值作比较,临界值查表可得。
对于k个算法,n个数据集,查表中(k-1, (n-1)*(k-1))处的值即为临界值

本文作者:无涯清酒

本文链接:https://www.cnblogs.com/wuyawine/p/15911459.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   无涯清酒  阅读(1238)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起