การแสดงเมทริกซ์ความสับสนของ Seaborn Heatmap ไม่แสดงตามที่คาดไว้

Aug 19 2020

โปรดแนะนำฉันเกี่ยวกับการแสดงแผนที่ความร้อนสำหรับเมทริกซ์ความสับสนฉันได้ลองขนาดรูปที่แตกต่างกัน แต่ไม่ได้รับการแสดงผลที่เหมาะสมรหัสของฉันด้านล่างและภาพหน้าจอ

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)  

คำตอบ

Ahx Aug 19 2020 at 21:40

ปัญหาแรกที่ฉันพบคือขนาดตัวอักษร

from seaborn import set
from seaborn import set_style

set(font_scale=1.8)
set_style("darkgrid")

หรือคุณสามารถตั้งค่าwhitegridสไตล์

คุณมีคุณสมบัติมากมายดังนั้นฉันขอแนะนำให้คุณใช้มาส์กสำหรับแนวทางง่ายๆ

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')

ผลลัพธ์ตัวอย่าง