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 一个小片段。
根据定义,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)
希望这可以帮助