「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」
一、引言
在深度学习中,分类任务评价指标是很重要的,一个好的评价指标对于训练一个好的模型极其关键;如果评价指标不对,对于任务而言是没有意义的。
目前一般都是用精准率(precision),召回率(recall),F1值来评价模型;
在sklearn中有自动生成这些指标的的工具,就是 sklearn.metrics.classification_report模块,即生成混淆矩阵。该函数就是在进行了分类任务之后通过输入原始真实数据(y_true)和预测数据(y_pred)而得到的分类报告,常常用来观察模型的好坏
二、动手
1.引入
from sklearn.metrics import classification_report
2.使用
classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2)
y_true: 真实值
y_pred: 预测值
labels: 报告中要包含的标签索引的可选列表;这个参数一般不需要设置(如果要设置,比如200个类别,那么就应该如此设置:lable= range(200);然后在classification_report中将labels=label),可是有的时候不设置就会出错,之所以会出错是因为:比如你总共的类别为200个类,但是,你的测试集中真实标签包含的类别只有199个,有一个类别缺失数据,如果不设置这个参数就会报错
target_name: 与标签label匹配的名称,就是一个字符串列表,在报告中显示;
sample_weight:设置权重的参数,一般不用,需要就可以用
digits:设置输出的数值精度
用起来可以很简单👇
栗子🚩
>>> from sklearn.metrics import classification_report
>>> y_true = [0, 1, 2, 2, 2]
>>> y_pred = [0, 0, 2, 2, 1]
>>> target_names = ['class 0', 'class 1', 'class 2']
>>> print(classification_report(y_true, y_pred, target_names=target_names))
precision recall f1-score support
class 0 0.50 1.00 0.67 1
class 1 0.00 0.00 0.00 1
class 2 1.00 0.67 0.80 3
micro avg 0.60 0.60 0.60 5
macro avg 0.50 0.56 0.49 5
weighted avg 0.70 0.60 0.61 5
TP(True Positive)真阳性/真正例:预测为正,实际也为正
FP(False Positive)假阳性/假正例:预测为正,实际为负
FN(False Negative)假阴性/假负例:预测与负、实际为正
TN(True Negative)真阴性/真负例:预测为负、实际也为负。
在这个报告中:
-
y_true为样本真实标签,y_pred为样本预测标签 -
support:指原始的真实数据中属于该类的个数,如上表class 0 类别在y_true列表中只有1 个 -
precision:,表示被分类器正确分为正例的个数(TP)占被分类器分为正例的样本(TP+FP)的比重 -
recall:,表示被分类器正确分为正例的个数(TP)占原始数据中全部正例(TP+FN)的比重 -
f1-score: -
micro avg:微平均,比如对于precision的微平均是将所有类中真正例先加起来,再除以所有类中的(真正例+假正例),如上表假设全部数据 5 个样本中有 3 个预测正确,所以 -
macro avg:宏平均, 比如不同类别对于precision的宏平均是将各类的precision先算好再对它们求算术平均,如上表 -
weighted avg:加权平均,就是测试集中样本量大的,我认为它更重要,给他设置的权重大点
多说一句,我就这么用,只放了两个参数,直接就可出结果了,简直不要太省事🤗
参考资料
sklearn.metrics.classification_report模块使用与指标分析(生成混淆矩阵评价分类指标)--搞视觉的张小凡