机器学习:Friedman检验与Nemenyi后续检验,Python实现
发布日期:2021-06-30 15:41:18 浏览次数:3 分类:技术文章

本文共 1120 字,大约阅读时间需要 3 分钟。

 


前言

本人大数据专业初入大三刚刚接触机器学习这一课程,教材是最典型的西瓜书,第一次作业当然就是利用本专业语言多功能python语言结合书内容尝试自己构建P-R曲线以及延伸指标曲线。当然初入一些算法和机器学习的一些库还不是很熟练掌握,有待提升自己的编程结合能力。在此领域本人有诸多不明确疑问,可能文章会有些许错误,望大家在评论区指正,本篇文章错误将会不断更正维护。

具体代码实现参考:


提示:以下是本篇文章正文内容,下面案例可供参考

一、Friedman检验

在很多时候,我们会在一组数据集上对比多个算法的性能。当有多个算法参与比较时,常用基于算法排序的Friedman

检验。我们可以给出多个数据集如D1、D2、D3、D4.....Dn等对算法A1、A2.....An进行比较。使用评估方法得到每个算法在每个数据集上的测试结果,然后在每个数据集上根据测试性能由好到坏排序,并赋予序值1,2,3....;若算法的测试性能相同,则平分序值。

数据集 算法A 算法B 算法C
D1 1 2 3
D2 1 2.5 2.5
D3 1 2 3
D4 1 2 3
平均序值 1 2.125 2.875

 

得出此算法比较序值表后,使用Friedman检验来判断这些算法的性能是否相同。若相同则平均序值也应当相同。

假定我们在N个数据集上比较k个算法,令\gamma _{i}表示第i个算法的平均序值,\gamma _{i}的均值和方差分别为(k+1)/2和(k^{2}-1)/12N。

在k和N都较大时,服从自由度为k-1的卡方分布。

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)#T的卡方分布    result = (n - 1) * result /(n * (k - 1) - result)#TF变量    return result

服从自由度为k-1和(k-1)(N-1)的F分布。

 

二、Nemenyi后续检验

若“所有算法的性能相同”这个假设被拒绝,则说明算法的性能显著不同,这时需要进行“后续检验”。

 

def nemenyi(n, k, q):    return q * (np.sqrt(k * (k + 1) / (6 * n)))

使用检验可以直观的用Friedman检验图表示:

这是大佬写的测试源代码:


总结

有时间测试不同算法的差异性吧。

参阅博客:

转载地址:https://jxnuxwt.blog.csdn.net/article/details/108896841 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:k-近邻算法(KNN)详解及python实现和应用
下一篇:hdfs mkdir报错Cannot create directory /usr. Name node is in safe mode.

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月07日 11时26分10秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章