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

时间:2019-07-29 14:50:04

标签: python confusion-matrix

我想为多标签图像分类问题计算kappa得分。

我不认为sklearn会固有地支持此功能,因为当我尝试此操作时

static_cast<T*>(this)

我得到

template <class T>
struct S {
    void clear() {
        auto this_ptr = static_cast<T*>(this)
        this_ptr->~T();
        new (this_ptr) T();
    }
};

有人对此有建议吗? 我的预测矩阵的形状为(845,8),其中包含0和1。 我的地面真值矩阵的形状为(845,8),其中包含0和1

我的标签看起来像这样

import sklearn
sklearn.metrics.cohen_kappa_score(y_test, predictions) 

提前谢谢。

#######编辑

请提供相关代码。另外还有一小段代码。

2 个答案:

答案 0 :(得分:2)

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

这是因为科恩的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,0,1,0,1,0,1,0])

如果优先考虑使用科恩(Cohen)的kappa,则建议对每个标签分别进行计算,然后取平均值。

否则,最好的做法是使用克里彭多夫的Alpha

Krippendorff的Alpha(也称为Krippendorff系数)是Cohen Kappa用来确定评估者之间可靠性的替代方法。

参考链接:wikipediastatisticshowto

尽管sklearn库中没有Krippendorff的Alpha,您可以使用此软件包krippendorff

使用它
import krippendorff
reliability_data = [[prediction matrix],[ground truth]]
print(krippendorff.alpha(reliability_data=reliability_data))
print([prediction matrix].shape,[ground truth].shape)

(845,8),(845,8)

希望这会有所帮助

答案 1 :(得分:1)

Krippendorff的Alpha

您不能将Cohen的Kappa用于多标签协议。解决方案是使用 Krippendorff的Alpha

但是,克里普多夫的Alpha可以用于许多不同的数据类型,并且需要记住您拥有名义数据(即类别)。

代码

您可以使用以下位置的krippendorff软件包:https://github.com/pln-fing-udelar/fast-krippendorff

请注意,alpha()函数具有参数level_of_measurement,默认情况下为interval,因此您需要将其设置为nominal

import krippendorff

reliability_data = [[predictions], [y_test]]

print(krippendorff.alpha(reliability_data=reliability_data, 
                         level_of_measurement='nominal'))