当前位置: 首页 > 知识库问答 >
问题:

多标签分类混淆矩阵的标签数错误

华坚成
2023-03-14

我正在y_test并y_pred混淆矩阵。我的数据用于多标签分类,因此行值是一种热编码。

我的数据有30个标签,但在输入混淆矩阵后,输出只有11行和列,这让我很困惑。我想我应该有一辆30X30的。

它们的格式是numpy数组。(y\u test和y\u pred是我使用dataframe.values将其转换为numpy数组的数据帧)

y\U测试。形状

(8680, 30)

y_test

array([[1, 0, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 0],
       ..., 
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]])

y\u预测。形状

(8680, 30)

y\u预测

array([[1, 0, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 0],
       ..., 
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]])

我将其转换为混乱矩阵可用格式:

y_test2 = y_test.argmax(axis=1)
y_pred2 = y_pred.argmax(axis=1)
conf_mat = confusion_matrix(y_test2, y_pred2)

下面是我的混淆矩阵:

conf_mat.shape

(11, 11)

conf\u材料

array([[4246,   77,   13,   72,   81,    4,    6,    3,    0,    0,    4],
       [ 106, 2010,   20,   23,   21,    0,    5,    2,    0,    0,    0],
       [ 143,   41,   95,   32,   10,    3,   14,    1,    1,    1,    2],
       [ 101,    1,    0,  351,   36,    0,    0,    0,    0,    0,    0],
       [ 346,   23,    7,   10,  746,    5,    6,    4,    3,    3,    2],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0],
       [   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0]])

为什么我的混淆矩阵只有11 X 11形状?不应该是30X30吗?

共有2个答案

张和颂
2023-03-14

所有这一切意味着一些标签没有使用。

y_test.any(axis=0)
y_pred.any(axis=0)

应显示其中只有11列有1。

如果不是这样的话,情况会是这样的:

from sklearn.metrics import confusion_matrix

y_test = np.zeros((8680, 30))
y_pred = np.zeros((8680, 30))

y_test[np.arange(8680), np.random.randint(0, 30, 8680)] = 1
y_pred[np.arange(8680), np.random.randint(0, 30, 8680)] = 1

y_test2 = y_test.argmax(axis=1)
y_pred2 = y_pred.argmax(axis=1)

confusion_matrix(y_test2, y_pred2).shape  # (30, 30)
严修诚
2023-03-14

我想你还没有弄清楚混淆矩阵的定义

y_true = [2, 0, 2, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])

数据框中的

pd.DataFrame(confusion_matrix(y_true, y_pred),columns=[0,1,2],index=[0,1,2])
Out[245]: 
   0  1  2
0  2  0  0
1  0  0  1
2  1  0  2

列和索引是输入的类别。

您有(11,11),这意味着您的数据中只有11个类别

 类似资料:
  • 我正在对实际数据和来自分类器的预测数据进行多标签分类。实际数据包括三类(c1、c2和c3),同样,预测数据也包括三类(c1、c2和c3)。数据如下 在多标签分类中,文档可能属于多个类别。在上述数据中,1表示文档属于特定类,0表示文档不属于特定类。 第一行Actual\u数据表示文档属于c1类和c2类,不属于c3类。类似地,第一行predicted\u数据表示文档属于类别c1、c2和c3。 最初我使

  • 我试图弄清楚如何使用神经网络为多标签分类任务生成混淆矩阵。我之前设法使用函数“交集”计算准确性,因为对此我不关心任何排序。 然而,为了计算混淆矩阵,我确实关心预测/标签的索引顺序。由于标签的值始终相同(

  • 我正在使用分类器的多类多标签输出。类的总数为14,实例可以关联多个类。例如: 我现在制作混淆矩阵的方式: 输出如下: 现在,我不确定sklearn的混淆矩阵是否能够处理多标签多类数据。谁能帮我一下吗?

  • 我需要计算表示为多个热向量的标签和预测的混淆矩阵。sklearn似乎不支持这种情况。 这是我所拥有的一个例子。假设有三个类,和;目标/标签为: 因此,我们有标签矩阵: 预测是: 预测矩阵为: 我希望输出是一个混淆矩阵,大致如下所示: 我使用来估计分类精度。然而,尽管正在为此类标签的准确性而工作,但混淆矩阵不支持上述场景。是否有任何替代? 另一个问题似乎给出了三个混淆矩阵,这不是我要寻找的情况。

  • 我得到了混淆矩阵,但是因为我的实际数据集有很多分类类别,所以很难理解。 范例- 但是如何打印标签/列名以便更好地理解呢? 我甚至试过这个- 需要帮忙吗?

  • 目前我们衡量分类器准确率的方式是使用以下公式:正确分类的记录数÷记录总数。 有时我们会需要一个更为详细的评价结果,这时就会用到一个称为混淆矩阵的可视化表格。 表格的行表示测试用例实际所属的类别,列则表示分类器的判断结果。 混淆矩阵可以帮助我们快速识别出分类器到底在哪些类别上发生了混淆,因此得名。 让我们看看运动员的示例,这个数据集中有300人,使用十折交叉验证,其混淆矩阵如下: 可以看到,100个