【发布时间】: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的吗?l1和l3class a怎么样? -
嗯,在一个数据集中,比如说,120,000 个样本分布在三个标签中。如果数据集是平衡的,那么每个类有 40,000 个,即
a有 40,000 个,b和c也是如此。 -
更好地说,
l_n是n_th样本的标签 -
所以澄清一下,您有大小为 5 的多热标签,然后根据组合或其他条件将其分配到 3 个类中?
-
正确!在我的问题中,我有数十万个分布在 6 个类中,每个类都有子类别,这就是我需要多标签分类的原因。以上只是为了简化问题。
标签: python scikit-learn confusion-matrix