用混淆矩阵计算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就一定有哪个比较好。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux中退出vim编辑器的命令_linux打开vim编辑器

    linux中退出vim编辑器的命令_linux打开vim编辑器编辑完保存退出的四种方式        1.Esc+:+wq+回车(w是write,q是quit)        2. Esc+:+x+回车(x=wq)        3. Esc+shift+zz         4.Esc+ZZ(在大写开启下)如果是进入了编辑,但是未进行任何改动的保存退出命令如下: Esc+:+q+回车不保存退出的命令:                 Esc+:+q+…

  • 虚拟机ifconfig或ip addr不显示ip地址「建议收藏」

    虚拟机ifconfig或ip addr不显示ip地址「建议收藏」虚拟机ifconfig或ipaddr不显示ip地址报错图片:一直查不到ip地址,有重新启动很多次解决方法(1)命令查看配置文件:vi/etc/sysconfig/network-scripts/ifcfg-ens33ens33注意看这个修改的文件后缀把ONBOOT的状态no改为yes然后重启,应该就没问题了。(2):还有一种可能是因为虚拟网卡没有正常连接,解决方法是开启虚拟网卡的服务:打开任务管理器,选择服务标签,为了保险,开启所有的和vmware有关的服务检

  • P2P技术和运用

    P2P技术和运用文章目录1.P2P技术1.1P2P技术优势2.P2P网络结构2.1组建P2P网络要解决的3个基本问题:2.2P2P网络类型:2.3集中式P2P网络2.3.1集中式P2P网络的特点2.3.2集中式P2P优缺点2.3.2.1优点2.3.2.2缺点2.4分布式非结构化P2P网络–Gnutella2.4.1洪泛算法:2.4.2Gnutella:2.4.3PureP2P特点:2.5结构化P2P网络2.5.1DHT的基本概念2.5.1.1DHT的特点2.5.1.2DHT应用举

  • Redis在windows下安装过程

    Redis在windows下安装过程

    2021年10月10日
  • C语言 条件运算符(? : )的用法[通俗易懂]

    C语言 条件运算符(? : )的用法[通俗易懂]条件运算符(?:)是一个三目运算符,即有三个操作数。使用条件运算符(?:)可以实现IfElse的功能,其一般形式为:          表达式1?表达式2:表达式3其意思是:如果表达式1为真,则运算表达式2,整个条件表达式的值为表达式2的值;反之,则运算表达式3,整个条件表达式的值为表达式3的值。

  • 7.PyCharm基本使用与常规设置

    7.PyCharm基本使用与常规设置文章目录0.新建Python项目0.1步骤0.2演示1.主题设置1.1步骤1.2演示2.字体大小调整2.1步骤2.2演示3.添加多个解释器3.1步骤3.2演示3.3版本切换0.新建Python项目0.1步骤第一次安装,需要创建一个项目。如果能进入到开发界面请略过。1.NewProject2.选择路径3.选择本地环境–>选择电脑安装的解释器4.取消生成main.py脚本5.create6.进入到开发界面–>close关闭推荐提示0.2演示1.主题设置1

发表回复

您的电子邮箱地址不会被公开。

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