【随笔-论文记录】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))处的值即为临界值