我想为多标签图像分类问题计算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)
提前谢谢。
#######编辑请提供相关代码。另外还有一小段代码。
答案 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用来确定评估者之间可靠性的替代方法。
参考链接:wikipedia,statisticshowto
尽管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)
您不能将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'))