如何解决归一化颜色图,以使用来自Sklearn的ConfusionMatrixDisplay绘制混淆矩阵
我正在尝试为sklearn
提供的10x10混淆矩阵创建颜色图。我希望能够自定义颜色图以在[0,1]之间进行归一化,但是我没有成功。我正在尝试使用ax_
和matplotlib.colors.Normalize
,但是由于ConfusionMatrixDisplay是一个sklearn对象,它会创建与平常的matplotlib
图不同的内容,因此我正在努力工作。
我的代码如下:
from sklearn.metrics import ConfusionMatrixDisplay,confusion_matrix
train_confuse_matrix = confusion_matrix(y_true = ytrain,y_pred = y_train_pred_labels)
print(train_confuse_matrix)
cm_display = ConfusionMatrixDisplay(train_confuse_matrix,display_labels = ['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck'])
print(cm_display)
cm_display.plot(cmap = 'Greens')
plt.show()
plt.clf()
[[3289 56 84 18 55 7 83 61 48 252]
[ 2 3733 0 1 2 1 16 1 3 220]
[ 81 15 3365 64 81 64 273 18 6 17]
[ 17 37 71 3015 127 223 414 44 6 64]
[ 3 1 43 27 3659 24 225 35 0 3]
[ 5 23 38 334 138 3109 224 80 4 25]
[ 3 1 19 10 12 7 3946 1 1 5]
[ 4 7 38 69 154 53 89 3615 2 27]
[ 62 67 12 7 25 3 62 4 3595 153]
[ 2 30 1 2 4 0 15 2 0 3957]]
解决方法
让我们手动尝试imshow
和annotate
:
accuracies = conf_mat/conf_mat.sum(1)
fig,ax = plt.subplots(figsize=(10,8))
cb = ax.imshow(accuracies,cmap='Greens')
plt.xticks(range(len(classes)),classes,rotation=90)
plt.yticks(range(len(classes)),classes)
for i in range(len(classes)):
for j in range(len(classes)):
color='green' if accuracies[i,j] < 0.5 else 'white'
ax.annotate(f'{conf_mat[i,j]}',(i,j),color=color,va='center',ha='center')
plt.colorbar(cb,ax=ax)
plt.show()
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。