FLeissKappa系数和Kappa系数的Python实现

FLeissKappa系数和Kappa系数的Python实现
Kappa系数和Fleiss Kappa系数是检验实验标注结果数据⼀致性⽐较重要的两个参数,其中Kappa系数⼀般⽤于两份标注结果之间的⽐较,Fleiss Kappa则可以⽤于多份标注结果的⼀致性检测,我在百度上⾯基本上没有到关于Fleiss Kappa系数的介绍,于是⾃⼰参照写了⼀个模板出来,参考的⽹址在这⾥:
这⾥简单介绍⼀下Fleiss Kappa系数的计算过程,假设有以下数据:
以上是14个⼈对于10个任务进⾏的5级标注的结果(N = 10,n = 14, k = 5),以上计算Fleiss Kappa系数的过程如下:
①对于Pj的计算,为每⼀列结果相乘除以任务总数,这⾥任务总数为14*10=140,对应于Kappa系数中每个分类的随机⼀致概率,然后由于Fleiss Kappa没有⼀个参照的标注值,因此这⾥计算P e理论⼀致性的时候,将每个P j进⾏平⽅求和,例如求Pj=1的计算情况如下:
ahb②⽽对于Pi的计算,是对每⼀个标注任务进⾏实际⼀致性的计算,也就是要计算:在所有的排列中(这⾥⽤组合也可以,但是包含顺序⽐较⽅便计算),具有⼀致性的排列有多少个,所以分母就是全排列的个数n*(n-1),⽽分⼦是这⼀⾏所有数平⽅和减去n(标注⼈数),表⽰实际上⼀致的标注对数(pairs)。为什么要减去n?因为直接各项平⽅相加包含了这n个标注⼈员⾃⼰和⾃⼰标注结果组成的pair,这样会有重复,所以要减去n。因此,Pi=2的计算情况如下:
③最后计算Fleiss Kappa系数,有:
这⾥附上实现相应的python代码:
# -*- encoding: utf-8 -*-
# 2017-7-27 by xuanyuan14
# 求Kappa系数和Fleiss Kappa系数的模板
# 分集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)
import numpy as np
def kappa(testData, k): #testData表⽰要计算的数据,k表⽰数据矩阵的是k*k的
dataMat = np.mat(testData)
P0 = 0.0
for i in range(k):
P0 += dataMat[i, i]*1.0
xsum = np.sum(dataMat, axis=1)
ysum = np.sum(dataMat, axis=0)
#xsum是个k⾏1列的向量,ysum是个1⾏k列的向量
Pe  = float(ysum*xsum)/k**2
孵化基金P0 = float(P0/k*1.0)nac
cohens_coefficient = float((P0-Pe)/(1-Pe))
return cohens_coefficient
def fleiss_kappa(testData, N, k, n): #testData表⽰要计算的数据,(N,k)表⽰矩阵的形状,说明数据是N⾏j列的,⼀共有n个标注⼈员    dataMat = np.mat(testData, float)
oneMat = np.ones((k, 1))
sum = 0.0
P0 = 0.0
for i in range(N):
temp = 0.0
for j in range(k):
sum += dataMat[i, j]
temp += 1.0*dataMat[i, j]**2
temp -= n
temp /= (n-1)*n
P0 += temp
P0 = 1.0*P0/N
柯西不等式
ysum = np.sum(dataMat, axis=0)kappa系数
for i in range(k):
ysum[0, i] = (ysum[0, i]/sum)**2
Pe = ysum*oneMat*1.0
ans = (P0-Pe)/(1-Pe)
return ans[0, 0]
if __name__ == "__main__":
dataArr1 = [[1.1, 1.2], [3.23, 4.78]]
dataArr2 = [[0, 0, 0, 0, 14],
[0, 2, 6, 4, 2],
[0, 0, 3, 5, 6],
[0, 3, 9, 2, 0],
[2, 2, 8, 1, 1],
[7, 7, 0, 0, 0],
[3, 2, 6, 3, 0],
[2, 5, 3, 2, 2],
武汉职业技术学院图书馆[6, 5, 2, 1, 0],
[0, 2, 2, 3, 7]]
res1 = kappa(dataArr1, 2)
res2 = fleiss_kappa(dataArr2, 10, 5, 14)
print res1, res2
#>>>0.855919552608 0.209930704422

本文发布于:2024-09-20 21:37:47,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/720612.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:系数   标注   结果   计算   致性   数据   包含   任务
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议