计算多标签图像分类的 kappa 分数

Rya*_*an 2 python confusion-matrix

我想计算多标签图像分类问题的 kappa 分数。

我不认为 sklearn 天生就支持这一点,因为当我尝试这个时

import sklearn
sklearn.metrics.cohen_kappa_score(y_test, predictions) 
Run Code Online (Sandbox Code Playgroud)

我明白了

ValueError: multilabel-indicator is not supported
Run Code Online (Sandbox Code Playgroud)

有人对如何做到这一点有建议吗?我的预测矩阵的形状为 (845,8),其中包含 0 和 1。我的真实矩阵的形状为 (845,8),其中包含 0 和 1

我的标签看起来像这样

[0,0,1,0,1,0,1,0]
Run Code Online (Sandbox Code Playgroud)

提前致谢。

#######编辑

请提供相关代码。Alteast 一个小片段。

spa*_*les 6

根据定义,Cohen 的 kappa 不支持多个标签

这是因为 Cohen 的 kappa 由 K = (po - pe)/(1 - pe) 给出

其中 po = (TP + FN)/(TP + TN + FP + FN)

pe = (TN + FP)/(TP + TN + FP + FN)

如您所见,它是使用混淆矩阵计算的。您只能为互斥标签(例如:[0,0,1,0,0,0,0,0])而不是非排他标签(例如:[0,0,1,0,1,0,1,0])

如果优先使用 Cohen 的 kappa,我建议为每个标签分别计算它,然后对它们求平均值。

否则这里最好的做法是使用Krippendorff 的 Alpha

Krippendorff 的 alpha(也称为 Krippendorff 系数)是 Cohen 的 Kappa 的替代方法,用于确定评分者间的可靠性。

参考链接:维基百科statisticshowto

尽管 Krippendorff 的 Alpha 在 sklearn 库中不可用,但您可以使用此包krippendorff使用它

import krippendorff
reliability_data = [[prediction matrix],[ground truth]]
print(krippendorff.alpha(reliability_data=reliability_data))
Run Code Online (Sandbox Code Playgroud)
print([prediction matrix].shape,[ground truth].shape)
Run Code Online (Sandbox Code Playgroud)

(845,8) , (845,8)

希望这可以帮助