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
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? –
Cosa intendevi per punti (i vettori di opinione) ?. Grazie! –
Sì. Ogni elemento di dati - che viene presentato come un vettore di funzionalità. – Aditya