用混淆矩阵计算kappa系数「建议收藏」

用混淆矩阵计算kappa系数「建议收藏」从一篇论文——融合注意力机制和高效网络的糖尿病视网膜病变识别与分类,看到人家除了特异性、敏感性、准确率、混淆矩阵以外,还用了加权kappa系数,所以了解一下kapp系数的知识,加权kappa还没找到更好的资料。。。资料来源于百度百科词条——kappa系数Kappa系数用于一致性检验,也可以用于衡量分类精度,但kappa系数的计算是基于混淆矩阵的.kappa系数是一种衡量分类精度的指标。它是通过把所有地表真实分类中的像元总数(N)乘以混淆矩阵对角线(Xkk)的和,再减去某一类地表真实像元总数与该类中被

大家好,又见面了,我是你们的朋友全栈君。

从一篇论文——融合注意力机制和高效网络的糖尿病视网膜病变识别与分类,看到人家除了特异性、敏感性、准确率、混淆矩阵以外,还用了加权kappa系数,所以了解一下kapp系数的知识,加权kappa还没找到更好的资料。。。
资料来源于百度百科词条——kappa系数
Kappa系数用于一致性检验,也可以用于衡量分类精度,但kappa系数的计算是基于混淆矩阵的.
kappa系数是一种衡量分类精度的指标。它是通过把所有地表真实分类中的像元总数(N)乘以混淆矩阵对角线(Xkk)的和,再减去某一类地表真实像元总数与该类中被分类像元总数之积对所有类别求和的结果,再除以总像元数的平方减去某一类地表真实像元总数与该类中被分类像元总数之积对所有类别求和的结果所得到的

计算公式

在这里插入图片描述
在这里插入图片描述

示例(这里的混淆矩阵用百度词条里的,但是好像我常用的是实际是下标,预测类别是上标,注意一下)

在这里插入图片描述
为了计算方便看懂,我重画了一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果分析

kappa计算结果为-1-1,但通常kappa是落在 0~1 间,可分为五组来表示不同级别的一致性:0.0~0.20极低的一致性(slight)、0.21-0.40一般的一致性(fair)、0.41-0.60 中等的一致性(moderate)、0.61-0.80 高度的一致性(substantial)和0.81-1几乎完全一致(almost perfect)。

matlab代码

下面是我写的matlab代码仅供参考

confusion_matrix=[239 21 16;
                  16 73 4;
                  6 9 280];
 [row col]=size(confusion_matrix);%获取矩阵的行和列
 fenleizhengque_yangben=diag(confusion_matrix);%分类正确的样本就是对角线上的值,这是一个列向量
 yangbenzongshu=sum(confusion_matrix(:));
 p0=sum(fenleizhengque_yangben)/yangbenzongshu;
%  假设每一类的真实样本个数分别为a1,a2,...,aC,而预测出来的每一类的样本个数分别为b1,b2,...,bC
%在百度词条里的图中,真实样本数就是按列求值,预测出来的样本就是按行求值 
%这里按照kappa系数百度词条里的图来计算,但是我一般用的混淆矩阵图是反过来的。。。这里不管了。。。就用百度词条里的来算
a=sum(confusion_matrix,1);%第2个参数为1是按列求值,把同一列的数加起来,这是行向量
b=sum(confusion_matrix,2);%第2个参数为2是按行求值,把同一行的数加起来,这是列向量
% 我常用的混淆矩阵是这样计算的,虽然结果没有改变。。。
% a=sum(confusion_matrix,2);%第2个参数为2是按行求值,把同一行的数加起来,这是列向量
% b=sum(confusion_matrix,1);%第2个参数为1是按列求值,把同一列的数加起来,这是行向量
pe=(a*b)/(yangbenzongshu*yangbenzongshu); %行向量乘以列向量是一个数
kappaxishu=(p0-pe)/(1-pe);

python 代码好像蛮多的,这边顺便mark一下,没有试过,仅供参考
代码来自 https://blog.csdn.net/qq_34107425/article/details/103692561?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

def eval_qwk_lgb_regr(y_true, y_pred):
  # Fast cappa eval function for lgb.
    dist = Counter(reduce_train['accuracy_group'])
    for k in dist:
        dist[k] /= len(reduce_train)
    reduce_train['accuracy_group'].hist()
    # reduce_train['accuracy_group']将会分成四组
    acum = 0
    bound = {}
    for i in range(3):
        acum += dist[i]
        bound[i] = np.percentile(y_pred, acum * 100)

    def classify(x):
        if x <= bound[0]:
            return 0
        elif x <= bound[1]:
            return 1
        elif x <= bound[2]:
            return 2
        else:
            return 3

    y_pred = np.array(list(map(classify, y_pred))).reshape(y_true.shape)
    return 'cappa', cohen_kappa_score(y_true, y_pred, weights='quadratic'), True

关于加权kappa系数,其实我具体的还是没怎么搞明白,
不过我找到了一篇说的很好的博客:https://blog.csdn.net/gltangwq/article/details/106357443
感觉加权kappa就是赋予权重,博客中说的很好,如果一个病人没用病,但是一个医生A预测他得了重病,一个医生B预测他得了轻病,那么普通的kappa来说,他们都错了,错的程度一样,这显然不符合常识,而加权kappa可以说明A预测的错误更大,这样更符合常识,博客中也说了对于一些有序关系的级别得分,可见加权kappa适用于有序的关系,并不是说加权kappa和普通kappa就一定有哪个比较好。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153996.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月28日 下午2:00
下一篇 2022年6月28日 下午2:16


相关推荐

  • Selenium + Pycharm 搭建自动化测试环境

    Selenium + Pycharm 搭建自动化测试环境今天尝试搭建了 Selenuim Pycharm 的自动化测试环境 过程如下 1 安装 Python 用的 3 5 安装的过程中记得选中将 Python 目录设置到 Path 中 免得后继手动添加 2 安装 Selenium 因为安装的 Python3 5 已经自带了 pip 所以我们只需要进入 cmd 进入 Python 安装目录下的 Scripts 文件夹 直接输入命令 pipinstall

    2026年3月27日
    1
  • 50组多风格提示词,全面测评Midjourney V7生图效果!

    50组多风格提示词,全面测评Midjourney V7生图效果!

    2026年3月15日
    2
  • 树的同构

    树的同构同构的定义:给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。更加具体的理解为:两棵树中的每两个对应结点的孩子必须相同,左右位置可不一样。树的存储结构

    2022年7月2日
    31
  • 小米将多枚商标转让至Kimi

    小米将多枚商标转让至Kimi

    2026年3月12日
    3
  • python自测100题「建议收藏」

    python自测100题「建议收藏」如果你在寻找python工作,那你的面试可能会涉及Python相关的问题。通过对网络资料的收集整理,本文列出了100道python的面试题以及答案,你可以根据需求阅读测试。python基础Q1.什么是Python?Python是一种面向对象的,交互式的,解释型的计算机程序设计语言。Python的设计具有高可读性,它使用英语关键词而非标点符号,语法结构也比其他语言简单。Q2.Py…

    2022年6月8日
    39
  • 敏捷测试人员如何做好敏捷测试

    敏捷测试人员如何做好敏捷测试提起敏捷项目 大家都非常耳熟 在国内 2012 年到 2015 年敏捷开发可谓热火朝天 即使是现在 很多软件公司的培训主题也仍然少不了它 即便如此 调查结果却显示超过一半的人并不记得敏捷宣言 如果正在或将要做敏捷项目 建议先了解下敏捷宣言 有助于产生敏捷意识 对敏捷项目有更深层的理解 nbsp 一 敏捷测试人员的焦虑与困惑 参加过多次敏捷项目培训 发现培训老师对测试人员的角色定位和敏捷测试意识鲜有提

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号