Hoe kan ik een verwarringsmatrix plotten?

Ik gebruik scikit-learn voor de classificatie van tekstdocumenten (22000) tot 100 klassen. Ik gebruik de verwarringsmatrixmethode van scikit-learn voor het berekenen van de verwarringsmatrix.

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

Zo ziet mijn verwarringsmatrix eruit:

[[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]]

Ik krijg echter geen duidelijk of leesbaar plot. Is er een betere manier om dit te doen?


Antwoord 1, autoriteit 100%

je kunt plt.matshow()gebruiken in plaats van plt.imshow()of je kunt de heatmapvan de seaborn module gebruiken (zie documentatie) om de verwarringsmatrix te plotten

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)

Antwoord 2, autoriteit 55%

@bninopaul’s antwoord is niet helemaal voor beginners

hier is de code die u kunt “kopiëren en uitvoeren”

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
plt.show()


Antwoord 3, autoriteit 29%

ALS u meer gegevensin uw verwarringsmatrix wilt, inclusief “totalenkolom” en “totalenregel“, en procenten (%) in elke cel, zoals matlab-standaard(zie afbeelding hieronder)

inclusief de Heatmap en andere opties…

Je zou veel plezier moeten hebben met de bovenstaande module, gedeeld in de github ; )

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


Deze module kan uw taak gemakkelijk uitvoeren en produceert de bovenstaande uitvoer met veel parameters om uw CM aan te passen:

Other episodes