一致性检验Kappa 与 混淆矩阵

这两个的概念其实很简单,不会涉及到很高深的数学知识。

1. Kappa系数

参考https://baike.baidu.com/item/kappa%E7%B3%BB%E6%95%B0/9385025?fr=aladdin
https://www.cnblogs.com/by-dream/p/7091315.html

1.1 公式介绍

kappa系数是一种衡量分类精度的指标。其计算公式如下
k = P o − P e 1 − P e k = \frac{P_o-P_e}{1-P_e} k=1PePoPe
其中, p 0 p_0 p0是每一类正确分类的样本数量之和除以总样本数,也就是总体分类精度 。

假设每一类的真实样本个数分别为 a 1 , a 2 , . . . , a C a1,a2,...,aC a1,a2,...,aC, 而预测出来的每一类的样本个数分别为 b 1 , b 2 , . . . , b C b1,b2,...,bC b1,b2,...,bC
总样本个数为 n n n,则有:
p e = a 1 ∗ b 1 + a 2 ∗ b 2 + . . . + a C ∗ b C n ∗ n pe = \frac{a_1*b_1+a_2*b_2+...+aC*bC}{n*n} pe=nna1b1+a2b2+...+aCbC

1.2 结果分析

kappa计算结果为[-1,1],但通常kappa是落在 [0, 1] 间,可分为五组来表示不同级别的一致性:

  • [0.00, 0.20] 极低的一致性(slight)
  • [0.21, 0.40] 一般的一致性(fair)
  • [0.41, 0.60] 中等的一致性(moderate)
  • [0.61, 0.80] 高度的一致性(substantial)
  • [0.81, 1.00] 几乎完全一致(almost perfect)。

1.3 举例

下表为混淆矩阵 (接下来会讲混淆矩阵)

类别实际为A实际为B实际为C
预测为A2392116
预测为B16734
预测为C69280

首先计算 P 0 P_0 P0, 是每一类正确分类的样本数量之和除以总样本数.
p o = 239 + 73 + 280 664 = 0.8916 p_o = \frac{239 +73+280}{664} = 0.8916 po=664239+73+280=0.8916
然后计算 P e P_e Pe

# 竖着相加
239+16+6=261
21+73+9=103
16+4+280=300
# 横着相加
239+21+16 = 276
16+73+4 = 93
6+9+280 = 295

p e = 261 × 276 + 103 × 93 + 300 × 295 664 × 664 = 0.3883 p_e = \frac{261×276+103×93+300 ×295}{664 ×664} = 0.3883 pe=664×664261×276+103×93+300×295=0.3883
因此
k a p p a = 0.8916 − 0.3883 1 − 0.3883 kappa = \frac{0.8916 -0.3883}{1-0.3883} kappa=10.38830.89160.3883

代码

from sklearn.metrics import confusion_matrix
import pandas as pd
import numpy as np

# y_true: 标注数据(真实标签)
# y_pred: 模型预测结果
def get_kappa(y_true, y_pred):
	# 计算混淆矩阵
    confusion_matrix = confusion_matrix(y_true, y_pred)
    
    # 一个混淆矩阵的例子
    # confusion_matrix = np.array(
    # [[10,  5,  5], 
    #  [ 2, 35,  2],
    #  [ 8, 5,  15]])
	
	# 可以调试一下这些分别都是什么
	# 该公式主要来自于https://www.cnblogs.com/by-dream/p/7091315.html
    all_sum = sum(sum(confusion_matrix))
    Po = sum(np.diagonal(confusion_matrix)) / all_sum
    a = sum(confusion_matrix)
    b = sum(confusion_matrix.T)
    Pe = sum(a*b)/ (all_sum*all_sum)
    kappa = (Po - Pe)/(1-Pe)
    
    return kappa
 
 y_true = [1,2,3]
 y_pred = [1,3,2]

2. 混淆矩阵 (Confusion Matrix)

参考https://baike.baidu.com/item/%E6%B7%B7%E6%B7%86%E7%9F%A9%E9%98%B5/10087822

混淆矩阵中

  • 每一列代表了预测类别
  • 每一行代表了·真实类别·

每一列中的数值表示真实数据被预测为该类的数目,如下表所示

类别实际为A实际为B实际为C
预测为A2392116
预测为B16734
预测为C69280

第一行第一列中的239表示有239个实际归属第一类的实例被预测为第一类;同理,第一行第二列的21表示有21个实际归属为第一类的实例被错误预测为第二类;以此类推

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值