2015-06-10 3 views
15

У меня есть задача анализа настроения, для этого Im, используя этот corpus мнения есть 5 классов (very neg, neg, neu, pos, very pos), от 1 до 5. Так что я классификацию следующим образом:Как интерпретировать матрицу смешения 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) 

Тогда с метриками я получил следующую матрицу путаницы и классификации отчет следующим образом:

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

Тогда это результат:

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

Как я могу интерпретировать вышеуказанную матрицу смешения и классификационный отчет. Я пробовал читать documentation и этот question. Но все же можно интерпретировать то, что здесь произошло, особенно с этими данными ?. Wny эта матрица как-то «диагональна» ?. С другой стороны, что означает отзыв, точность, f1score и поддержка этих данных ?. Что я могу сказать об этих данных ?. Спасибо заранее, ребята

ответ

33

Отчет о классификации должен быть простым - отчет P/R/F-Measure для каждого элемента в тестовых данных. В задачах многоклассификации не рекомендуется читать Precision/Recall и F-Measure по всем данным, любой дисбаланс заставит вас почувствовать, что вы достигли лучших результатов. Вот где такие отчеты помогают.

Приходит к матрице замешательства, это очень подробное представление о том, что происходит с вашими ярлыками. Таким образом, в первом классе было 71 очко (метка 0). Из них ваша модель успешно идентифицировала 54 из них правильно в метке 0, но 17 были отмечены как метка 4. Аналогично посмотрите на вторую строку. В классе 1 было 43 балла, но 36 из них были отмечены правильно. Ваш классификатор предсказывал 1 в классе 3 и 6 в классе 4.

enter image description here

Теперь вы можете увидеть образец этого следует. Идеальные классификаторы со 100-процентной точностью создавали бы чистую диагональную матрицу, которая имела бы все точки, предсказанные в их правильном классе.

Возвращение/Точность. Это некоторые из наиболее часто используемых мер при оценке эффективности вашей системы. Теперь у вас было 71 очко в первом классе (назовите его 0 классом). Из них ваш классификатор смог получить 54 элемента правильно. Это ваш отзыв. 54/71 = 0,76. Теперь посмотрим только на первый столбец в таблице. Есть одна ячейка со входом 54, остальные - нули. Это означает, что ваш классификатор маркировал 54 точки в классе 0, и все 54 из них были фактически в классе 0. Это точность. 54/54 = 1. Посмотрите на столбец с пометкой 4. В этом столбце есть элементы, разбросанные по всем пяти строкам. 367 из них были отмечены правильно. Остальные все неверны. Это уменьшает вашу точность.

F Измерение представляет собой гармоническое среднее точности и повторения. Обязательно прочитайте подробную информацию об этом. https://en.wikipedia.org/wiki/Precision_and_recall

+0

Итак, когда я суммирую значения матрицы, я получаю 857, так как я разбил данные следующим образом: 'X_train, X_test, y_train, y_test = cross_validation.train_test_split (X, y, test_size = 0.33)' (33 % для обучения и 2599 мнений, у меня есть 33% из 2599 - 857). Здесь 2599 экземпляров отражены в матрице путаницы ?. Однако, как вы видите, для этой задачи я не «балансировал» данные. Когда я сбалансировал результаты данных, где намного лучше, почему вы думаете, что это произошло? –

+0

Что вы имели в виду с точками (векторы мнения) ?. Благодаря! –

+0

Yup. Каждый элемент данных - который представлен как вектор функции. – Aditya

1

Вот документация scikit-Learn метода sklearn.metrics.precision_recall_fscore_support: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html#sklearn.metrics.precision_recall_fscore_support

Это, кажется, указывает, что поддержка является число вхождений каждого конкретного класса в истинных ответов (ответы в тестовом наборе). Вы можете рассчитать его, суммируя строки матрицы замешательства.

0

Confusion Matrix сообщает нам о распределении наших прогнозируемых значений по всем фактическим результатам. Accuracy_scores, Recall (чувствительность), точность, специфика и другие подобные показатели являются подмножествами матрицы замешательства. Показатели F1 - это гармонические средства точности и запоминания. Столбцы поддержки в Classification_report рассказывают нам о фактических подсчетах каждого класса в тестовых данных. Хорошо, отдых объясняется выше красиво. Спасибо.

Смежные вопросы