一个函数就可直接评价分类指标,竟如此简单?

562 阅读3分钟

「这是我参与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)精度=\frac{正确预测的个数(TP)}{被预测正确的个数(TP+FP)},表示被分类器正确分为正例的个数(TP)被分类器分为正例的样本(TP+FP)的比重

  • recall召回率=正确预测的个数(TP)预测个数(TP+FN)召回率=\frac{正确预测的个数(TP)}{预测个数(TP+FN)},表示被分类器正确分为正例的个数(TP)原始数据中全部正例(TP+FN)的比重

  • f1-scoreF1=2精度召回率(精度+召回率)F1 = 2*\frac{精度*召回率}{(精度+召回率)}

  • micro avg微平均,比如对于precision的微平均是将所有类中真正例先加起来,再除以所有类中的(真正例+假正例),如上表假设全部数据 5 个样本中有 3 个预测正确,所以 microavg=35=0.6micro avg = \frac{3}{5}=0.6

  • macro avg宏平均, 比如不同类别对于precision的宏平均是将各类的precision先算好再对它们求算术平均,如上表 macroavg=(0.50+0.00+1.00)3=0.5macro avg=\frac{(0.50+0.00+1.00)}{3}=0.5

  • weighted avg加权平均,就是测试集中样本量大的,我认为它更重要,给他设置的权重大点

多说一句,我就这么用,只放了两个参数,直接就可出结果了,简直不要太省事🤗

image.png

image.png

参考资料

sklearn.metrics.classification_report模块使用与指标分析(生成混淆矩阵评价分类指标)--搞视觉的张小凡