2015-06-10 8 views
15

Ho un compito sentiment analysis, per questo Im usando questo corpus I pareri sono 5 classi (very neg, neg, neu, pos, very pos), da 1 a 5. Così faccio la classificazione come segue:Come interpretare la matrice di confusione di learnkit e il report di classificazione di scikit?

from sklearn.feature_extraction.text import TfidfVectorizer 
import numpy as np 
tfidf_vect= TfidfVectorizer(use_idf=True, smooth_idf=True, 
          sublinear_tf=False, ngram_range=(2,2)) 
from sklearn.cross_validation import train_test_split, cross_val_score 

import pandas as pd 

df = pd.read_csv('/corpus.csv', 
        header=0, sep=',', names=['id', 'content', 'label']) 

X = tfidf_vect.fit_transform(df['content'].values) 
y = df['label'].values 


from sklearn import cross_validation 
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, 
                y, test_size=0.33) 


from sklearn.svm import SVC 
svm_1 = SVC(kernel='linear') 
svm_1.fit(X, y) 
svm_1_prediction = svm_1.predict(X_test) 

Poi, con le metriche ho ottenuto il seguente rapporto matrice di confusione e classificazione, come segue:

print '\nClasification report:\n', classification_report(y_test, svm_1_prediction) 
print '\nConfussion matrix:\n',confusion_matrix(y_test, svm_1_prediction) 

Poi, questo è il risultato:

012.351.641.061.
Clasification report: 
      precision recall f1-score support 

      1  1.00  0.76  0.86  71 
      2  1.00  0.84  0.91  43 
      3  1.00  0.74  0.85  89 
      4  0.98  0.95  0.96  288 
      5  0.87  1.00  0.93  367 

avg/total  0.94  0.93  0.93  858 


Confussion matrix: 
[[ 54 0 0 0 17] 
[ 0 36 0 1 6] 
[ 0 0 66 5 18] 
[ 0 0 0 273 15] 
[ 0 0 0 0 367]] 

Come interpretare la matrice di confusione e il report di classificazione sopra riportati. Ho provato a leggere il documentation e questo question. Ma può ancora interpretare ciò che è successo qui in particolare con questi dati ?. Wy questa matrice è in qualche modo "diagonale"? D'altra parte cosa significa il richiamo, la precisione, il punteggio e il supporto per questi dati ?. Cosa posso dire di questi dati ?. Grazie in anticipo ragazzi

risposta

33

Il rapporto di classificazione deve essere semplice: un rapporto di P/R/F-Measure per ciascun elemento nei dati di test. Nei problemi Multiclass, non è una buona idea leggere Precision/Recall e F-Measure su tutti i dati, qualsiasi squilibrio ti farebbe sentire di aver raggiunto risultati migliori. Ecco dove tali rapporti aiutano.

Venendo alla matrice di confusione, è una rappresentazione molto dettagliata di ciò che sta accadendo con le etichette. Quindi c'erano 71 punti nella prima classe (etichetta 0). Di questi, il tuo modello è riuscito a identificare 54 di quelli correttamente nell'etichetta 0, ma 17 sono stati contrassegnati come etichetta 4. Analogamente, guarda la seconda riga. C'erano 43 punti nella classe 1, ma 36 erano segnati correttamente. Il tuo classificatore previsto 1 in classe 3 e 6 in classe 4.

enter image description here

Ora è possibile vedere il modello questo segue. Un classificatore ideale con una precisione del 100% produrrebbe una matrice diagonale pura che avrebbe tutti i punti previsti nella loro classe corretta.

Venendo al richiamo/precisione. Sono alcune delle misure maggiormente utilizzate per valutare l'efficienza del sistema. Ora avevi 71 punti in prima classe (chiamalo 0 classe). Di questi il ​​tuo classificatore è riuscito a ottenere correttamente 54 elementi. Questo è il tuo richiamo. 54/71 = 0,76. Ora guarda solo la prima colonna nella tabella. C'è una cella con la voce 54, resto sono tutti zeri. Ciò significa che il classificatore ha segnato 54 punti nella classe 0, e tutti e 54 di questi erano effettivamente in classe 0. Questa è la precisione. 54/54 = 1. Guarda la colonna contrassegnata 4. In questa colonna, ci sono elementi sparsi in tutte e cinque le righe. 367 di loro sono stati contrassegnati correttamente. Il resto è tutto sbagliato. In questo modo si riduce la precisione.

F La misura è la media armonica di precisione e richiamo. Assicurati di leggere i dettagli su questi. https://en.wikipedia.org/wiki/Precision_and_recall

+0

Quindi, quando somma i valori della matrice ottengo 857, poiché ho diviso i dati in questo modo: 'X_train, X_test, y_train, y_test = cross_validation.train_test_split (X, y, test_size = 0.33)' (33 % per la formazione e ci sono 2599 istanze di opinione, ho che il 33% di 2599 è 857). Questo è dove le 2599 istanze si riflettono nella matrice di confusione ?. Tuttavia, come puoi vedere per questo compito, non ho "bilanciato" i dati. Quando ho bilanciato i risultati dei dati dove molto meglio, perché pensi che sia successo? –

+0

Cosa intendevi per punti (i vettori di opinione) ?. Grazie! –

+0

Sì. Ogni elemento di dati - che viene presentato come un vettore di funzionalità. – Aditya

0

La matrice di confusione ci dice sulla distribuzione dei nostri valori previsti in tutti i risultati effettivi. Precisioni di precisione, richiamo (sensibilità), precisione, specificità e altri parametri simili sono sottoinsiemi di Confusion Matrix. I punteggi F1 sono i mezzi armonici di precisione e richiamo. Le colonne di supporto in Classification_report ci dicono dei conteggi effettivi di ogni classe nei dati di test. Bene, il riposo è spiegato in modo eccellente. Grazie.

Problemi correlati