如何解读scikit的学习混淆矩阵和分类报告?
How to interpret scikit's learn confusion matrix and classification report?
我有一个情绪分析任务,为此我使用这个 corpus 意见有 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)
然后通过metrics我得到了如下的混淆矩阵和分类报告,如下:
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 and this question。但是仍然可以用这个数据来解释这里发生了什么吗?。为什么这个矩阵不知何故 "diagonal"?。另一方面,召回率、精度、f1score 和对这些数据的支持意味着什么?关于这些数据我能说什么?提前谢谢大家
分类报告必须简单明了 - 测试数据中每个元素的 P/R/F-Measure 报告。在 Multiclass 问题中,在整个数据上读取 Precision/Recall 和 F-Measure 不是一个好主意,任何不平衡都会让你觉得你已经取得了更好的结果。这就是此类报告的用武之地。
关于混淆矩阵,它非常详细地表示了标签的情况。所以第一个class(标签0)有71个点。其中,您的模型成功识别了标签 0 中的 54 个,但有 17 个被标记为标签 4。类似地查看第二行。 class1 共有 43 个点,但其中 36 个标记正确。您的 classifier 在 class 3 中预测了 1,在 class 4 中预测了 6。
现在您可以看到接下来的模式。具有 100% 准确度的理想 class 生成器将生成一个纯对角矩阵,该矩阵会将所有点预测为正确的 class。
即将 Recall/Precision。它们是评估系统运行情况时最常用的一些指标。现在你在第一个 class 中获得了 71 分(称之为 0 class)。其中,您的 classifier 能够正确获取 54 个元素。那是你的回忆。 54/71 = 0.76。现在只看 table 中的第一列。有一个条目为 54 的单元格,其余全部为零。这意味着您的 classifier 在 class 0 中标记了 54 个点,而所有 54 个点实际上都在 class 0 中。这就是精度。 54/54 = 1。查看标记为 4 的列。在该列中,元素分散在所有五行中。其中 367 个被正确标记。其余的都不正确。所以这会降低你的精度。
F Measure 是 Precision 和 Recall 的调和平均值。
请务必阅读有关这些的详细信息。 https://en.wikipedia.org/wiki/Precision_and_recall
这是 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
这似乎表明支持度是真实响应(测试集中的响应)中每个特定 class 的出现次数。您可以通过对混淆矩阵的行求和来计算它。
混淆矩阵告诉我们预测值在所有实际 outcomes.Accuracy_scores 中的分布,召回率(灵敏度)、精确度、特异性和其他类似指标是混淆矩阵的子集。
F1 分数是准确率和召回率的调和方法。
Classification_report 中的支持列告诉我们测试数据中每个 class 的实际计数。
好吧,上面对休息的解释很漂亮。
谢谢。
我有一个情绪分析任务,为此我使用这个 corpus 意见有 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)
然后通过metrics我得到了如下的混淆矩阵和分类报告,如下:
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 and this question。但是仍然可以用这个数据来解释这里发生了什么吗?。为什么这个矩阵不知何故 "diagonal"?。另一方面,召回率、精度、f1score 和对这些数据的支持意味着什么?关于这些数据我能说什么?提前谢谢大家
分类报告必须简单明了 - 测试数据中每个元素的 P/R/F-Measure 报告。在 Multiclass 问题中,在整个数据上读取 Precision/Recall 和 F-Measure 不是一个好主意,任何不平衡都会让你觉得你已经取得了更好的结果。这就是此类报告的用武之地。
关于混淆矩阵,它非常详细地表示了标签的情况。所以第一个class(标签0)有71个点。其中,您的模型成功识别了标签 0 中的 54 个,但有 17 个被标记为标签 4。类似地查看第二行。 class1 共有 43 个点,但其中 36 个标记正确。您的 classifier 在 class 3 中预测了 1,在 class 4 中预测了 6。
现在您可以看到接下来的模式。具有 100% 准确度的理想 class 生成器将生成一个纯对角矩阵,该矩阵会将所有点预测为正确的 class。
即将 Recall/Precision。它们是评估系统运行情况时最常用的一些指标。现在你在第一个 class 中获得了 71 分(称之为 0 class)。其中,您的 classifier 能够正确获取 54 个元素。那是你的回忆。 54/71 = 0.76。现在只看 table 中的第一列。有一个条目为 54 的单元格,其余全部为零。这意味着您的 classifier 在 class 0 中标记了 54 个点,而所有 54 个点实际上都在 class 0 中。这就是精度。 54/54 = 1。查看标记为 4 的列。在该列中,元素分散在所有五行中。其中 367 个被正确标记。其余的都不正确。所以这会降低你的精度。
F Measure 是 Precision 和 Recall 的调和平均值。 请务必阅读有关这些的详细信息。 https://en.wikipedia.org/wiki/Precision_and_recall
这是 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
这似乎表明支持度是真实响应(测试集中的响应)中每个特定 class 的出现次数。您可以通过对混淆矩阵的行求和来计算它。
混淆矩阵告诉我们预测值在所有实际 outcomes.Accuracy_scores 中的分布,召回率(灵敏度)、精确度、特异性和其他类似指标是混淆矩阵的子集。 F1 分数是准确率和召回率的调和方法。 Classification_report 中的支持列告诉我们测试数据中每个 class 的实际计数。 好吧,上面对休息的解释很漂亮。 谢谢。