python - Seaborn 热图混淆矩阵显示未按预期显示
问题描述
请指导我显示混淆矩阵的热图。我尝试了不同的无花果大小,但没有得到正确的显示。下面的代码和屏幕截图
def show_confusion_matrix(test_labels,predictions):
confusion=sk_metrics.confusion_matrix(np.argmax(test_labels,axis=1),np.argmax(predictions,axis=1))
confusion_normalized=confusion.astype('float')/confusion.sum(axis=1)
#confusion_normalized=confusion_matrix(np.argmax(y_test,axis=1),np.argmax(predictions,axis=1))
axis_labels=list(uniquelabel) ## unique labels has 120 dog breed names
fig,ax=plt.subplots(figsize=(30,70))
ax=sns.heatmap(confusion_normalized,xticklabels=axis_labels,yticklabels=axis_labels,
linewidths=0.10,cmap='Blues',annot=True,fmt='.2f',square=True)
plt.title('Confusion_matrix')
plt.ylabel("True Label")
plt.xlabel("Predicted Label")
show_confusion_matrix(y_test,predictions)
解决方案
我发现的第一个问题是字体大小
from seaborn import set
from seaborn import set_style
set(font_scale=1.8)
set_style("darkgrid")
或者您可以设置样式whitegrid
您有很多功能,因此我建议您使用 mask 进行简单的处理。
from numpy import zeros_like
from numpy import triu_indices_from
mask = zeros_like(confusion_normalized)
mask[triu_indices_from(mask)] = True
您需要使用confusion_normalized
,因为您想绘制归一化的混淆矩阵。
from seaborn import axes_style
from matplotlib.pyplot import subplots
with axes_style("white"):
f, ax = subplots(figsize=(15, 15))
ax = heatmap(confusion_normalized,
annot=True,
mask=mask,
vmax=1,
vmin=0,
square=True,
cmap="YlGnBu",
linewidths=1.5,
annot_kws={"size": 18})
savefig('heatmap.png')
推荐阅读
- java - Graphql 返回枚举集合
- html - CSS试图将列表和标题居中
- java - Imagebutton 在滑动面板中不起作用
- css - Angular 6 不调用 ngClass
- java - JUnit 测试从一个类到另一个类的转换
- mongodb - Spring Data Mongo - 在数组字段上使用 Aggregation.group() 和 Aggregation.facet() 的问题
- asp.net-core - 从 WPF 应用程序中的 ASP.NET SignalR 客户端连接托管在 ASP.NET Core 上的信号器集线器
- swift - 为什么绘制的 UIBezierPath 定位在右下角而没有在 CAShapeLayer 中指定中心位置?
- sql - Group count for every hour on table
- arrays - 如何将 UInt16 转换为位数组