多类多标签混淆矩阵,其中预测和标签是多热向量

Posted

技术标签:

【中文标题】多类多标签混淆矩阵,其中预测和标签是多热向量【英文标题】:Multiclass multilabel confusion matrix where predictions and labels are multi-hot vectors 【发布时间】:2019-07-21 12:44:38 【问题描述】:

我需要计算表示为多热向量的标签和预测的混淆矩阵。似乎 sklearn 不支持这种情况。

这是我所拥有的一个例子。假设有三个类,'a', 'b','c';目标/标签是:

l1 = [1, 0 ,1, 0, 0]; of class a
l2 = [1, 0 ,1, 0, 1]; of class b
l3 = [1, 0 ,0, 0, 0]; of class a
l4 = [0, 0 ,0, 0, 0]; of class c

所以,我们有标签矩阵:

L = np.array([ [1, 0 ,1, 0, 0], 
[1, 0 ,1, 0, 1], 
[1, 0 ,0, 0, 0],  
[0, 0 ,0, 0, 0]] )

预测是:

p1 = [1, 0 ,1, 0, 0]; of class a
p2 = [1, 0 ,1, 0, 0]; of class b
p3 = [1, 1 ,0, 0, 0]; of class a
p4 = [0, 1 ,0, 0, 0]; of class c

预测矩阵为:

P = np.array([ [1, 0 ,1, 0, 0], 
[1, 0 ,1, 0, 0], 
[1, 1 ,0, 0, 0],  
[0, 1 ,0, 0, 0]] )

我希望输出是一个3x3 混淆矩阵,大致如下所示:

   A  B  C
A  2  0  0  
B  0  0  1
C  0  1  0

我使用sklearnaccuracy_score来估计分类准确率。然而,尽管accuracy_score 正在努力提高此类标签的准确性,但sklearn 混淆矩阵不支持上述情况。 sklearn 有什么替代品吗?

Another question 似乎给出了三个混淆矩阵,我正在寻找的不是这种情况。

【问题讨论】:

你能解释一下你是如何分配类标签a, b, c的吗? l1l3 class a 怎么样? 嗯,在一个数据集中,比如说,120,000 个样本分布在三个标签中。如果数据集是平衡的,那么每个类有 40,000 个,即 a 有 40,000 个,bc 也是如此。 更好地说,l_nn_th 样本的标签 所以澄清一下,您有大小为 5 的多热标签,然后根据组合或其他条件将其分配到 3 个类中? 正确!在我的问题中,我有数十万个分布在 6 个类中,每个类都有子类别,这就是我需要多标签分类的原因。以上只是为了简化问题。 【参考方案1】:

我认为准确性不是在这种情况下使用的正确指标。您宁愿使用sklearn.metrics.ranking 中的roc_auc_score

【讨论】:

谢谢!我担心的是混淆矩阵,顺便说一句,accuracy_score 确实支持多热点。我对文本进行了编辑,以便更清楚地将准确性与混淆矩阵联系起来的原因。

以上是关于多类多标签混淆矩阵,其中预测和标签是多热向量的主要内容,如果未能解决你的问题,请参考以下文章

混淆矩阵错误“分类指标无法处理多标签指标和多类目标的混合”

如何使用 Tensorflow 创建预测标签和真实标签的混淆矩阵?

如何使用 Tensorflow 创建预测标签和真实标签的混淆矩阵?

在 Keras 中进行预测后无法创建混淆矩阵 - 无法处理多标签指示符的混合 [重复]

29、评估多分类问题--混淆矩阵和F分数

从两个向量构建混淆矩阵