2015-06-10 33 views
15

Tôi có một nhiệm vụ phân tích tình cảm, đối với Im này sử dụng corpus này là những ý kiến ​​có 5 lớp (very neg, neg, neu, pos, very pos), từ 1 đến 5. Vì vậy, tôi làm việc phân loại như sau:Làm thế nào để giải thích ma trận nhầm lẫn về ma trận học và báo cáo phân loại của 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) 

sau đó, với các số liệu tôi có được ma trận nhầm lẫn và phân loại báo cáo sau đây, như sau:

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

sau đó, đây là kết quả:

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

Tôi làm cách nào để diễn giải báo cáo phân loại và ma trận nhầm lẫn ở trên. Tôi đã thử đọc số documentation và số này question. Nhưng vẫn có thể giải thích những gì đã xảy ra ở đây đặc biệt với dữ liệu này ?. Wny ma trận này là bằng cách nào đó "chéo" ?. Mặt khác có nghĩa là thu hồi, chính xác, f1score và hỗ trợ cho dữ liệu này ?. Tôi có thể nói gì về dữ liệu này ?. Thanks in advance guys

Trả lời

33

Báo cáo phân loại phải đơn giản - báo cáo P/R/F-Measure cho từng phần tử trong dữ liệu thử nghiệm của bạn. Trong các vấn đề Multiclass, không nên đọc Precision/Recall và F-Measure trên toàn bộ dữ liệu bất kỳ sự mất cân bằng nào sẽ khiến bạn cảm thấy bạn đã đạt được kết quả tốt hơn. Đó là nơi các báo cáo như vậy giúp ích.

Đến với ma trận nhầm lẫn, nó thể hiện chi tiết về những gì đang xảy ra với nhãn của bạn. Vì vậy, có 71 điểm trong lớp đầu tiên (nhãn 0). Trong số này, mô hình của bạn đã thành công trong việc xác định 54 trong số đó một cách chính xác trong nhãn 0, nhưng 17 đã được đánh dấu là nhãn 4. Tương tự nhìn vào hàng thứ hai. Có 43 điểm trong lớp 1, nhưng 36 trong số đó đã được đánh dấu chính xác. phân loại của bạn dự đoán 1 trong lớp 3 và 6 trong lớp 4.

enter image description here

Bây giờ bạn sẽ nhìn thấy mô hình này sau. Một bộ phân loại lý tưởng với độ chính xác 100% sẽ tạo ra một ma trận đường chéo thuần túy có tất cả các điểm được dự đoán trong lớp chính xác của chúng.

Đến với Recall/Precision. Đó là một số biện pháp chủ yếu được sử dụng để đánh giá hiệu quả hoạt động của hệ thống của bạn. Bây giờ bạn đã có 71 điểm trong lớp học đầu tiên (gọi nó là 0 lớp). Trong số đó, trình phân loại của bạn có thể nhận được 54 phần tử chính xác. Đó là nhớ lại của bạn. 54/71 = 0,76. Bây giờ chỉ nhìn vào cột đầu tiên trong bảng. Có một ô với mục 54, phần còn lại là 0. Điều này có nghĩa là phân loại của bạn được đánh dấu 54 điểm trong lớp 0, và tất cả 54 trong số họ đã thực sự trong lớp 0. Đây là độ chính xác. 54/54 = 1. Nhìn vào cột được đánh dấu 4. Trong cột này, có các phần tử nằm rải rác trong tất cả năm hàng. 367 trong số chúng được đánh dấu chính xác. Phần còn lại tất cả đều không chính xác. Vì vậy, làm giảm độ chính xác của bạn.

F Đo lường là trung bình điều hòa của Precision và Recall. Hãy chắc chắn rằng bạn đã đọc chi tiết về những điều này. https://en.wikipedia.org/wiki/Precision_and_recall

+0

Vì vậy, khi tôi tính tổng giá trị của ma trận tôi nhận được 857, vì tôi đã tách dữ liệu như sau: 'X_train, X_test, y_train, y_test = cross_validation.train_test_split (X, y, test_size = 0.33)' (33 % cho đào tạo và có 2599 trường hợp ý kiến, tôi có 33% trong số 2599 là 857). Đây là nơi mà các trường hợp 2599 được phản ánh trong ma trận nhầm lẫn ?. Tuy nhiên, như bạn có thể thấy cho nhiệm vụ này tôi đã không "cân bằng" dữ liệu. Khi tôi cân bằng kết quả dữ liệu ở nơi tốt hơn nhiều, Tại sao bạn nghĩ điều này xảy ra ?. –

+0

Ý của bạn là gì với điểm (vectơ ý kiến) ?. Cảm ơn! –

+0

Yup. Mỗi phần tử dữ liệu - được trình bày dưới dạng vectơ đặc trưng. – Aditya

1

Đây là tài liệu cho scikit-học phương pháp sklearn.metrics.precision_recall_fscore_support của: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html#sklearn.metrics.precision_recall_fscore_support

Dường như để cho biết rằng sự hỗ trợ là số lần xuất hiện của mỗi lớp học đặc biệt trong các câu trả lời đúng (phản ứng trong tập kiểm tra của bạn). Bạn có thể tính toán nó bằng cách tổng hợp các hàng của ma trận nhầm lẫn.

0

Ma trận lộn xộn cho chúng ta biết về phân phối giá trị dự đoán của chúng tôi trên tất cả các kết quả thực tế.Accuracy_scores, Nhớ lại (độ nhạy), Độ chính xác, Độ đặc hiệu và các số liệu tương tự khác là tập con của Ma trận lẫn lộn. Điểm số F1 là phương tiện điều hòa chính xác và thu hồi. Các cột hỗ trợ trong Classification_report cho chúng tôi biết về số lượng thực tế của mỗi lớp trong dữ liệu thử nghiệm. Vâng, phần còn lại được giải thích ở trên đẹp. Cảm ơn bạn.

Các vấn đề liên quan