混淆矩阵颜色匹配数据大小,而不是分类精度

问题描述 投票:0回答:1

我正在使用sklearn库中的ConfusionMatrixDisplay在我拥有的两个列表上绘制一个混淆矩阵,尽管结果都是正确的,但有一个细节困扰着我。混淆矩阵中的颜色密度似乎与实例数匹配,而不是与分类的准确性匹配。

这是我用来绘制混淆矩阵的代码:

target_names = ['Empty', 'Human', 'Dog', 'Dog&Human']
labels_names = [0,1,2,3] 
print(classification_report(y_true, y_pred,labels=labels_names, target_names=target_names))    
cm = confusion_matrix(y_true, y_pred,labels=labels_names)
disp = ConfusionMatrixDisplay(confusion_matrix=cm,display_labels=target_names)
disp = disp.plot(cmap=plt.cm.Blues,values_format='g')
plt.show()

现在我从报告和混淆矩阵中得到的结果是:

enter image description here

如您所见,“ Dog”和“ Dog&Human”类的精度均为1,但是“ Dog”类的颜色是唯一带有浓蓝色的颜色。甚至具有错误分类实例的类“ Empty”也具有较深的颜色,使得分类看起来更好。这显然是由于每个类中的数据数量所致,但是,颜色是否不应该取决于分类的性能,而不应该取决于正确检测到的实例数量吗?

我试图对混淆矩阵进行归一化,它解决了这个问题,但是我更希望使用一个矩阵来显示实际数字而不是百分比。有什么解决办法吗?非常感谢。

python matplotlib scikit-learn confusion-matrix
1个回答
0
投票

confusion_matrix函数使您可以按行或按列对矩阵进行归一化,这有助于解决您面临的类不平衡问题。代替:

confusion_matrix(y_true, y_pred,labels=labels_names)

简单通过:

confusion_matrix(y_true, y_pred,labels=labels_names,normalize='true')

...按行归一化,我认为这是您想要的。 normalize='pred'将允许您按列进行归一化。检查here了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.