与Cohen Kapp签订的多标签注释器协议

2024-09-28 22:18:36 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我想为文档添加注释。每个文档都可以用多个标签进行批注。在本例中,我有两个注释器(a和b),它们分别标记两个文档。在

from sklearn.metrics import cohen_kappa_score
annotator_a = [ 
    ["a","b","c"],
    ["d","e"]
]
annotator_b = [
    ["b","c"],
    ["f"]
]

注释器_a用标签a、b和c标记文档1。注释器_b用标签b和c标记文档1

我尝试使用以下公式计算注释器一致性:

^{pr2}$

但这会导致一个错误:

ValueError: You appear to be using a legacy multi-label data representation. Sequence of sequences are no longer supported; use a binary array or sparse matrix instead.

关于如何计算注释器对这一集的一致性有什么想法吗?在


Tags: from文档标记import标签sklearnmetrics公式
2条回答

具体错误是由于不支持多标签输出的表示(请参阅sklearn的^{}函数的文档)。 即使是正确的多标签输出,您仍然会得到一个错误,因为cohen_kappa_score不支持多标签输入(见下文)。事实上,Cohen's kappa只能应用于多类问题,而多标签输出的定义是非排他的。在

您可以为每个标签使用一个二进制分类器,并计算每个标签的Cohen kappa。如果你需要一个代表一致性的唯一数字,你可以计算标签的平均kappa值。在

示例:Cohen's kappa for multi-label

to_dict = lambda x: {k: [1 if k in y else 0 for y in x] for k in labels}
a_dict = to_dict(annotator_a)
b_dict = to_dict(annotator_b)
cohen_dict = {k: cohen_kappa_score(a_dict[k], b_dict[k]) for k in labels}
cohen_avg = np.mean(list(cohen_dict.values()))

print(f'a_dict: {a_dict}')
print(f'b_dict: {b_dict}')
print(f'cohen_dict: {cohen_dict}')
print(f'cohen_avg: {cohen_avg}')

输出:

^{pr2}$

如何转换为序列序列以纠正多标签表示

from sklearn.preprocessing import MultiLabelBinarizer
m = MultiLabelBinarizer(classes=list('abcdef'))
a_multi = m.fit_transform(annotator_a)
b_multi = m.fit_transform(annotator_b)
print(f'a_multi:\n{a_multi}')
print(f'b_multi:\n{b_multi}')
cohen_kappa_score(a_multi, b_multi)

输出:

a_multi:
[[1 1 1 0 0 0]
 [0 0 0 1 1 0]]
b_multi:
[[0 1 1 0 0 0]
 [0 0 0 0 0 1]]
...
ValueError: multilabel-indicator is not supported

Cohen的Kappa不支持不支持多标签输入。不用科恩的Kappa,可以用Krippendorff的Alpha。此度量支持评分者之间的协议、缺失值和非排他主题。它在pypi上可用。在

相关问题 更多 >