首页 > 解决方案 > 如何知道我的标签在 python 的混淆矩阵中正确排列?

问题描述

我为我的数据创建了一个混淆矩阵,如下所示:

knn = KNeighborsClassifier(n_neighbors = 85).fit(x_train, y_train)
accuracy = knn.score(x_test, y_test)
knn_pred = knn.predict(x_test)
print(knn_pred)

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, knn_pred)

在上面的代码中 y_test 是一个包含情绪的标签列表['neutral', 'happy','sad', 'angry','fearful','surprised','calm','disgust']。现在,当我运行上面的代码来打印混淆矩阵时,我得到的输出如下:

[[31  2  0  0  6  0  0  9]
 [ 0 38  5  0  0  1  4  0]
 [ 8  6 13  1  3  0  0 17]
 [12  5  6 13  2  0  1  9]
 [ 5 10  4  4 10  0  1 14]
 [ 0 16  5  0  1  0  1  1]
 [ 5 24  6  2  2  1  2  6]
 [ 6  8  2  2  7  0  0 23]]

现在我在这里怀疑上面矩阵中的行对应于哪种情绪。如何在我上面得到的混淆矩阵中找到对应于一行的情感标签。还告诉我如何在带有标签的热图上绘制混淆矩阵。

标签: pythonmatplotlibmachine-learning

解决方案


第三个参数 ofconfusion_matrix仅用于此目的。引用文档

labels:形状类似数组(n_classes),默认=无标签列表来索引矩阵。这可用于重新排序或选择标签子集。如果给出 None ,那些在 y_true 或 y_pred 中至少出现一次的将按排序顺序使用。

因此,您的行和列按字母顺序排列。如果您想要不同的顺序,只需将标签作为列表传递给confusion_matrix它,它将使用您指定的顺序。


推荐阅读