joh*_*doe 27 nlp machine-learning svm confusion-matrix scikit-learn
我有一个情感分析的任务,使用本该即时通讯语料库的意见有5类(very neg,neg,neu,pos,very 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)
Run Code Online (Sandbox Code Playgroud)
然后根据指标我获得了以下混淆矩阵和分类报告,如下:
print '\nClasification report:\n', classification_report(y_test, svm_1_prediction)
print '\nConfussion matrix:\n',confusion_matrix(y_test, svm_1_prediction)
Run Code Online (Sandbox Code Playgroud)
然后,这是结果:
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]]
Run Code Online (Sandbox Code Playgroud)
如何解释上述混淆矩阵和分类报告.我试着阅读文档和这个问题.但是仍然可以解释这里发生的事情,尤其是这些数据?这个矩阵是以某种方式"对角线"?另一方面,什么意味着召回,精确,f1分数和对这些数据的支持?我能对这些数据说些什么?先谢谢你们
Adi*_*tya 58
分类报告必须简单明了 - 测试数据中每个元素的P/R/F-Measure报告.在多类问题中,对整个数据进行精确/调用和F测量不是一个好主意,任何不平衡都会让你觉得你已经达到了更好的效果.这就是这些报告有用的地方.
即将出现混淆矩阵,它可以非常详细地表示您的标签发生了什么.所以第一堂课有71分(标签0).其中,您的模型成功识别标签0中正确的54个,但17个标记为标签4.同样看第二行.第1类有43分,但其中36分被正确标记.你的分类器在3级预测1,在4级预测6.

现在您可以看到以下模式.具有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