La pantalla de matriz de confusión del mapa de calor de Seaborn no se muestra como se esperaba

Aug 19 2020

por favor, guíeme en la pantalla del mapa de calor para la matriz de confusión. He probado diferentes tamaños de fig pero no obtengo una visualización adecuada. Mi código a continuación y la captura de pantalla

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)  

Respuestas

Ahx Aug 19 2020 at 21:40

El primer problema que detecto es el tamaño de la fuente.

from seaborn import set
from seaborn import set_style

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

o puede establecer el estilo whitegrid

Tiene muchas características, por lo tanto, le sugiero que aplique una máscara para un enfoque simple.

from numpy import zeros_like
from numpy import triu_indices_from

mask = zeros_like(confusion_normalized)
mask[triu_indices_from(mask)] = True

Debe usarlo confusion_normalizedya que desea trazar la matriz de confusión normalizada.

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

Una salida de ejemplo