2015-06-10 10 views
15

Ich habe eine Stimmungsanalyse Aufgabe, für dieses Im diese corpus mit den Meinungen 5 Klassen (very neg, neg, neu, pos, very pos), von 1 bis 5. So kann ich die Klassifizierung wie folgt:Wie interpretiere ich Scikits Lernmatrix und Klassifikationsbericht?

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) 

dann mit den Messdaten gewonnen I den folgenden Konfusionsmatrix und Klassifizierungsbericht, wie folgt:

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

Dann wird dieses Ergebnis:

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

Wie kann ich die obige Konfusionsmatrix und den Klassifizierungsbericht interpretieren? Ich habe versucht, die documentation und diese question zu lesen. Aber trotzdem kann man mit diesen Daten interpretieren, was hier passiert ist. Wny diese Matrix ist irgendwie "diagonal" ?. Auf der anderen Seite bedeutet das den Rückruf, die Genauigkeit, die Bewertung und die Unterstützung für diese Daten. Was kann ich zu diesen Daten sagen? Vielen Dank im Voraus Jungs

Antwort

33

Klassifizierung Bericht muss einfach sein - ein Bericht von P/R/F-Messung für jedes Element in Ihren Testdaten. In Multiclass-Problemen ist es keine gute Idee, Precision/Recall und F-Measure über die gesamten Daten zu lesen. Jedes Ungleichgewicht würde Ihnen das Gefühl geben, bessere Ergebnisse zu erzielen. Hier helfen solche Berichte.

Kommen zu Verwirrung Matrix, es ist sehr detaillierte Darstellung dessen, was mit Ihren Etiketten los ist. So gab es 71 Punkte in der ersten Klasse (Label 0). Von diesen konnte Ihr Modell 54 korrekt in Label 0 identifizieren, 17 wurden jedoch als Label 4 gekennzeichnet. Sehen Sie sich auch die zweite Zeile an. Es gab 43 Punkte in Klasse 1, aber 36 von ihnen wurden korrekt markiert. Ihre Klassifikator vorhergesagt 1 in Klasse 3 und 6 in der Klasse 4.

enter image description here

Jetzt können Sie das Muster sehen dies folgt. Ein idealer Klassifikator mit 100% Genauigkeit würde eine reine Diagonalmatrix erzeugen, die alle Punkte in ihrer korrekten Klasse vorhersagen würde.

Kommen zum Rückruf/Precision. Sie sind einige der am häufigsten verwendeten Maßnahmen bei der Beurteilung, wie gut Ihr System funktioniert. Jetzt hatten Sie 71 Punkte in der ersten Klasse (nennen Sie es 0 Klasse). Aus ihnen konnte Ihr Klassifikator 54 Elemente korrekt ermitteln. Das ist deine Erinnerung. 54/71 = 0,76. Jetzt schau nur auf die erste Spalte in der Tabelle. Es gibt eine Zelle mit Eintrag 54, Rest alle sind Nullen. Das bedeutet, dass Ihr Klassifikator 54 Punkte in Klasse 0 markiert hat und alle 54 von ihnen tatsächlich in Klasse 0 waren. Das ist Präzision. 54/54 = 1. Betrachten Sie die Spalte 4. In dieser Spalte sind in allen fünf Zeilen Elemente verstreut. 367 von ihnen wurden korrekt markiert. Rest alle sind falsch. Das reduziert Ihre Präzision.

F Measure ist das harmonische Mittel von Precision und Recall. Stellen Sie sicher, dass Sie Details zu diesen Themen gelesen haben. https://en.wikipedia.org/wiki/Precision_and_recall

+0

Also, wenn ich die Werte der Matrix summiere, bekomme ich 857, da ich die Daten wie folgt aufgeteilt habe: 'X_zug, X_test, y_zug, y_test = cross_validation.train_test_split (X, y, test_size = 0,33)' (33 % für Training und es gibt 2599 Meinungsinstanzen, ich habe, dass die 33% von 2599 857 ist). Hier werden die 2599-Instanzen in der Konfusionsmatrix wiedergegeben. Wie Sie jedoch für diese Aufgabe sehen können, habe ich die Daten nicht ausgeglichen. Als ich die Datenergebnisse ausbalancierte, war es viel besser, warum glaubst du, dass das passiert ist? –

+0

Was meinst du mit Punkten (Meinungsvektoren) ?. Vielen Dank! –

+0

Yup. Jedes Datenelement - welches als Merkmalsvektor dargestellt wird. – Aditya

1

Hier ist die Dokumentation für Scikit-Learn sklearn.metrics.precision_recall_fscore_support Methode suchen: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html#sklearn.metrics.precision_recall_fscore_support

Es zu zeigen scheint, dass die Unterstützung in den wahren Antworten (Antworten in Ihrem Testset die Anzahl des Auftretens jeder einzelnen Klasse). Sie können es berechnen, indem Sie die Zeilen der Konfusionsmatrix summieren.

0

Die Konfusionsmatrix gibt Aufschluss über die Verteilung unserer vorhergesagten Werte auf alle tatsächlichen Ergebnisse.Akkurat_Scheine, Recall (Empfindlichkeit), Präzision, Spezifität und andere ähnliche Metriken sind Teilmengen der Konfusionsmatrix. F1 Partituren sind das harmonische Mittel der Präzision und des Rückrufs. Support-Spalten in Classification_report geben Auskunft über die tatsächlichen Zählungen jeder Klasse in Testdaten. Nun, Rest ist oben schön erklärt. Danke.

Verwandte Themen