用混淆矩阵计算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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ListView addHeaderView和addFooterView使用上的一些问题

    ListView addHeaderView和addFooterView使用上的一些问题

    2021年8月23日
    52
  • Java配置环境变量

    Java配置环境变量Java配置环境变量要想配置环境变量先要下载好JDK点击这里可以下载可以通过鼠标下滑找到以前的版本,网页最前面的部分是最新版本,一般来说用的都是jdk1.8这个版本。点击箭头位置下载根据自己需要下载,如何知道自己是x86还是x64呢?windows电脑右键点击此电脑—>属性知道了这个,就可以点进去下载了!如果需要账户就创建账户,然后就可以下载了,因为步骤简单,不放出来了!好的,现在默认JDK已经下好了,但是笔者的JDK版本不一致,但是配置环境变量是一样的下载好之后会得到这样

    2022年6月12日
    23
  • 我的世界区块显示_我的世界怎么显示区块线

    我的世界区块显示_我的世界怎么显示区块线我的世界手游区块是一个独特的机制,很多玩家对于区块是什么不太了解,区块显示指令以及区块的产生不是很熟悉,为了帮助到大家,今天小编就为大家带来我的世界手游区块显示指令分享:区块玩法操作详解的内容,希望大家能够喜欢,下面就让我们一起来看看吧!区块相关1.出生点区块在出生点附近的区块是一块围绕世界出生点的区域中的一个区块,只要有玩家在主世界,它就不会被从内存中卸载。这意味着像红石元件和刷怪会继续,甚至所…

    2025年12月11日
    2
  • Win10重装系统提示:在efi系统上windows只能安装到gpt磁盘「建议收藏」

    在重装系统的过程中遇到问题,提示信息是:在efi系统上windows只能安装到gpt磁盘。如下图所示。当选中安装的系统盘时,提示Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT磁盘。主要是由于BIOS方式对应MBR分区表;EFI方式则对应GPT分区。所以主要有两种解决方法:1、让启动U盘以传统的BIOS方式启动来安装。2、…

    2022年4月18日
    3.9K
  • PHP 使用 ElasticSearch 做搜索

    PHP 使用 ElasticSearch 做搜索

    2022年2月13日
    46

发表回复

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

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