如何解读scikit的学习混淆矩阵和分类报告?

时间:2015-06-10 03:12:02

标签: machine-learning nlp scikit-learn svm confusion-matrix

我有一个情绪分析任务,为此我使用此corpus意见有5个类(very negnegneuposvery pos),从1到5.所以我按如下方式进行分类:

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

如何解释上述混淆矩阵和分类报告。我尝试阅读documentationquestion。但是仍然可以解释这里发生的事情,尤其是这些数据?这个矩阵是以某种方式“对角线”?另一方面,什么意味着召回,精确,f1分数和对这些数据的支持?我能对这些数据说些什么?在此先感谢你们

3 个答案:

答案 0 :(得分:50)

分类报告必须简单明了 - 测试数据中每个元素的P / R / F-Measure报告。在多类问题中,对整个数据进行精确/调用和F测量并不是一个好主意,任何不平衡都会让你觉得你已经达到了更好的效果。这些报告有帮助的地方。

即将出现混淆矩阵,它更详细地表示了您的标签发生了什么。所以第一堂课有71分(标签0)。其中,您的模型成功识别标签0中正确的54个,但17个标记为标签4.同样看第二行。第1类有43分,但其中36分被正确标记。你的分类器在3级预测1,在4级预测6。

enter image description here

现在您可以看到以下模式。具有100%准确度的理想分类器将产生纯对角矩阵,其将具有在其正确类别中预测的所有点。

召回/精确。它们是评估系统运行状况的最常用的一些措施。现在你在头等舱中得到71分(称之为0级)。其中你的分类器能够正确地获得54个元素。这是你的回忆。 54/71 = 0.76。现在只查看表格中的第一列。有一个单元格,条目54,其余全部为零。这意味着你的分类器在0级中标记了54个点,并且其中所有54个实际上都在0级。这是精确的。 54/54 = 1.查看标记为4的列。在此列中,所有五行中都有分散的元素。其中367个被正确标记。休息都不正确。这会降低你的精确度。

F Measure是Precision和Recall的调和平均值。 请务必阅读有关这些的详细信息。 https://en.wikipedia.org/wiki/Precision_and_recall

答案 1 :(得分: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

似乎表明支持是真实响应中每个特定类的出现次数(测试集中的响应)。您可以通过对混淆矩阵的行求和来计算它。

答案 2 :(得分:0)

混淆矩阵告诉我们所有实际结果中预测值的分布.Acucuracy_scores,Recall(灵敏度),精度,特异性和其他类似指标是混淆矩阵的子集。 F1分数是精度和召回的调和方式。 Classification_report中的支持列告诉我们测试数据中每个类的实际计数。 好吧,休息在上面说得很漂亮。 谢谢。