Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 混淆矩阵颜色匹配数据大小,而不是分类精度_Python_Matplotlib_Scikit Learn_Confusion Matrix - Fatal编程技术网

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

Python 混淆矩阵颜色匹配数据大小,而不是分类精度,python,matplotlib,scikit-learn,confusion-matrix,Python,Matplotlib,Scikit Learn,Confusion Matrix,我正在使用sklearn library的ConfusionMatrixDisplay在我拥有的两个列表上绘制一个混淆矩阵,虽然结果都是正确的,但有一个细节让我感到困扰。混淆矩阵中颜色的密度似乎与实例的数量相匹配,而不是与分类的准确性相匹配 这是我用来绘制混淆矩阵的代码: target_names = ['Empty', 'Human', 'Dog', 'Dog&Human'] labels_names = [0,1,2,3] print(classification_report(y

我正在使用sklearn library的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()
现在,我从报告和混淆矩阵中得到的结果是:

正如您所看到的,“Dog”和“Dog&Human”两个类的精度都达到了1,但是“Dog”类的颜色是唯一一个具有深蓝色的。即使是“Empty”类(它有一些错误分类的实例)也有一个较暗的颜色,这使它看起来分类更好。这显然是由于每个类中的数据数量,但是,颜色不应该取决于分类的性能,而不是正确检测到的实例的数量吗


我试着规范化混淆矩阵,它解决了这个问题,但是我更喜欢用一个矩阵来显示实际的数字,而不是百分比。有什么解决办法吗?非常感谢。

混乱\u矩阵函数允许您按行或列对矩阵进行规范化,这有助于解决您面临的类不平衡问题。而不是:

confusion_matrix(y_true, y_pred,labels=labels_names)
只需通过:

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

。。。按行进行规范化,我认为这是您想要的
normalize='pred'
将允许您按列进行规范化。查看更多详细信息。

非常感谢您的回答。我以前尝试过
normalize='true'
,但是结果有点不对劲,但是按照您的建议将其更改为
normalize='pred'
,颜色问题和百分比是正确的。但是,有没有一种方法可以解决颜色问题而不必进行标准化?我想保留数据的实际数量,因为它可以更好地了解情况。