15

我有 3 位评分者对 60 个案例的评分。这些在按文档组织的列表中 - 第一个元素指的是第一个文档的评级,第二个文档的第二个,依此类推:

rater1 = [-8,-7,8,6,2,-5,...]
rater2 = [-3,-5,3,3,2,-2,...]
rater3 = [-4,-2,1,0,0,-2,...]

Cohen 的 Kappa 是否有 python 实现?我在 numpy 或 scipy 中找不到任何东西,在 stackoverflow 上也找不到任何东西,但也许我错过了?这是一个相当普遍的统计数据,所以我很惊讶我找不到像 Python 这样的语言。

4

6 回答 6

22

Cohen 的 kappa是在 scikit-learn 0.17 中引入的:

sklearn.metrics.cohen_kappa_score(y1,y2,标签=无,权重=无)

示例

from sklearn.metrics import cohen_kappa_score
labeler1 = [2, 0, 2, 2, 0, 1]
labeler2 = [0, 0, 2, 2, 0, 2]
cohen_kappa_score(labeler1, labeler2)

提醒一下,来自 {1}:

在此处输入图像描述


参考:

于 2016-12-07T21:54:41.097 回答
18

您也可以使用nltk.metrics.agreement。下面是相同的代码片段

from nltk import agreement
rater1 = [1,1,1]
rater2 = [1,1,0]
rater3 = [0,1,1]

taskdata=[[0,str(i),str(rater1[i])] for i in range(0,len(rater1))]+[[1,str(i),str(rater2[i])] for i in range(0,len(rater2))]+[[2,str(i),str(rater3[i])] for i in range(0,len(rater3))]
ratingtask = agreement.AnnotationTask(data=taskdata)
print("kappa " +str(ratingtask.kappa()))
print("fleiss " + str(ratingtask.multi_kappa()))
print("alpha " +str(ratingtask.alpha()))
print("scotts " + str(ratingtask.pi()))

另请参阅http://courses.washington.edu/cmling/lab7.html了解其他示例

于 2017-06-19T06:09:25.910 回答
3

旧问题,但供参考 Kappa 可以在 skll 指标包中找到。

http://skll.readthedocs.org/en/latest/api/metrics.html#skll.metrics.kappa

于 2014-05-07T10:34:12.960 回答
2

为了扩展Franck Dernoncourt 的答案并解决 skjerns 评论,这里是为两个以上的评估者创建矩阵的代码:

import itertools

from sklearn.metrics import cohen_kappa_score
import numpy as np

# Note that I updated the numbers so all Cohen kappa scores are different.
rater1 = [-8, -7, 8, 6, 2, -5]
rater2 = [-3, -5, 3, 3, 2, -2]
rater3 = [-4, -2, 1, 3, 0, -2]

raters = [rater1, rater2, rater3]

data = np.zeros((len(raters), len(raters)))
# Calculate cohen_kappa_score for every combination of raters
# Combinations are only calculated j -> k, but not k -> j, which are equal
# So not all places in the matrix are filled.
for j, k in list(itertools.combinations(range(len(raters)), r=2)):
    data[j, k] = cohen_kappa_score(raters[j], raters[k])

# [[0.        , 0.11764706, 0.        ],
#  [0.        , 0.        , 0.25      ],
#  [0.        , 0.        , 0.        ]]

这是一个情节data

import seaborn as sns
import matplotlib.pyplot as plt

sns.heatmap(
    data, 
    mask=np.tri(len(raters)),
    annot=True, linewidths=5,
    vmin=0, vmax=1,
    xticklabels=[f"Rater {k + 1}" for k in range(len(raters))],
    yticklabels=[f"Rater {k + 1}" for k in range(len(raters))],
)
plt.show()

热图

于 2021-11-20T17:22:11.667 回答
1

我还没有发现它包含在任何主要的库中,但是如果你在周围搜索一下,你可以在各种“食谱”类型的网站等上找到实现。以下是实现Cohen 的 kappaFleiss 的 kappaKrippendorff 的 alpha 的页面

于 2012-07-17T18:04:04.450 回答
1

statsmodels是一个 Python 库,其中包含 Cohen 的 Kappa 和其他评分者间一致性指标(在 中statsmodels.stats.inter_rater)。

于 2016-07-15T18:37:21.247 回答