Comment tracer une matrice de confusion? [dupliquer]

cette question a déjà une réponse ici:

  • comment tracer une matrice de confusion avec un axe de chaîne plutôt qu'un entier en python 3 réponses

j'utilise scikit-learn pour la classification des documents textuels(22000) à 100 classes. J'utilise la méthode de matrice de confusion de scikit-learn pour le calcul de la matrice de confusion.

model1 = LogisticRegression()
model1 = model1.fit(matrix, labels)
pred = model1.predict(test_matrix)
cm=metrics.confusion_matrix(test_labels,pred)
print(cm)
plt.imshow(cm, cmap='binary')

voici à quoi ressemble ma matrice de confusion:

[[3962  325    0 ...,    0    0    0]
 [ 250 2765    0 ...,    0    0    0]
 [   2    8   17 ...,    0    0    0]
 ..., 
 [   1    6    0 ...,    5    0    0]
 [   1    1    0 ...,    0    0    0]
 [   9    0    0 ...,    0    0    9]]

cependant, je ne reçois pas un tracé clair ou lisible. Est-il une meilleure façon de le faire?

25
demandé sur Eric 2016-02-23 11:06:07

3 réponses

enter image description here

vous pouvez utiliser plt.matshow() au lieu de plt.imshow() ou vous pouvez utiliser heatmap du module seaborn ( voir documentation ) pour tracer la matrice de confusion

import seaborn as sn
import pandas as pd
import matplotlib.pyplot as plt
array = [[33,2,0,0,0,0,0,0,0,1,3], 
        [3,31,0,0,0,0,0,0,0,0,0], 
        [0,4,41,0,0,0,0,0,0,0,1], 
        [0,1,0,30,0,6,0,0,0,0,1], 
        [0,0,0,0,38,10,0,0,0,0,0], 
        [0,0,0,3,1,39,0,0,0,0,4], 
        [0,2,2,0,4,1,31,0,0,0,2],
        [0,1,0,0,0,0,0,36,0,2,0], 
        [0,0,0,0,0,0,1,5,37,5,1], 
        [3,0,0,0,0,0,0,0,0,39,0], 
        [0,0,0,0,0,0,0,0,0,0,38]]
df_cm = pd.DataFrame(array, index = [i for i in "ABCDEFGHIJK"],
                  columns = [i for i in "ABCDEFGHIJK"])
plt.figure(figsize = (10,7))
sn.heatmap(df_cm, annot=True)
54
répondu bninopaul 2018-08-01 07:17:03

la réponse de @bninopaul n'est pas entièrement pour les débutants

voici le code que vous pouvez "copier et exécuter"

import seaborn as sn
import pandas as pd
import matplotlib.pyplot as plt

array = [[13,1,1,0,2,0],
     [3,9,6,0,1,0],
     [0,0,16,2,0,0],
     [0,0,0,13,0,0],
     [0,0,0,0,15,0],
     [0,0,1,0,0,15]]        
df_cm = pd.DataFrame(array, range(6),
                  range(6))
#plt.figure(figsize = (10,7))
sn.set(font_scale=1.4)#for label size
sn.heatmap(df_cm, annot=True,annot_kws={"size": 16})# font size

result

26
répondu user1644018 2017-09-22 21:38:54

SI vous voulez plus de données à vous de la confusion de la matrice, y compris les " totaux de la colonne " et " "151910920 total" ligne ", et pourcents (%) dans chaque cellule, comme matlab par défaut (voir image ci-dessous)

enter image description here

avec Heatmap et autres options...

You devriez avoir du plaisir avec le module ci-dessus, ont partagé le github ; )

https://github.com/wcipriano/pretty-print-confusion-matrix


ce module peut faire votre tâche facilement et produit la sortie ci-dessus avec beaucoup de params pour personnaliser votre CM: enter image description here

5
répondu Wagner Cipriano 2018-07-03 22:32:09