参考来源:
CSDN:sklearn.metrics.classification_report 模块使用与指标分析(生成混淆矩阵评价分类指标)
CSDN:机器学习笔记--classification_report & 精确度/召回率/F1值

sklearn.metrics.classification_report

1. 前言

在深度学习中,分类任务评价指标是很重要的,一个好的评价指标对于训练一个好的模型极其关键;如果评价指标不对,对于任务而言是没有意义的。
一般都是用准确率来作为评价指标,然而对于类别不均衡的任务来说,或者在任务中某一个类的准确率非常重要。如果再使用单纯的准确率肯定是不合理的,对任务来说 没有意义。所以我们需要一个好的评价指标来。目前一般都是用精准率,召回率,F1分数来评价模型;
sklearn 中有自动生成这些指标的的工具,就是 sklearn.metrics.classification_report 模块。

2. classification_report 简介

sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息。

  1. sklearn.metrics.classification_report(y_true, y_pred,
  2. labels=None, target_names=None,
  3. sample_weight=None, digits=2, output_dict=False)

主要参数:
**y_true**:1 维数组,或标签指示器数组/稀疏矩阵,类别的真实标签值,类标签的列表。
**y_pred**:1 维数组,或标签指示器数组/稀疏矩阵, 预测值的标签,类标签的列表,分类器返回的估计值。
**labels**arrayshape = [n_labels],报表中包含的标签索引的可选列表;这个参数一般不需要设置(如果要设置,比如 200 个类别,那么就应该如此设置:lable= range(200);然后在sklearn.metrics.classification_report 中将 labels=label),可是有的时候不设置就会出错,之所以会出错是因为:比如你总共的类别为 200 个类,但是,你的测试集中真实标签包含的类别只有 199 个,有一个类别缺失数据,如果不设置这个参数就会报错。
**target_names**:字符串列表,与标签匹配的可选显示名称(相同顺序),在报告中显示;也即是显示与 labels 对应的名称。
**sample_weight**:类似于 shape = [n_samples] 的数组,可选项,样本权重,设置权重的参数,一般不用,需要就可以用。
**digits**int,输出浮点值的位数;这个参数是用来设置你要输出的格式位数,就是几位有效数字吧,大概就是这个意思,即指定输出格式的精确度。
**output_dict**:一般不用,好像没啥用;如果为 True,则将输出作为 dict 返回。

3. classification_report 用法示例:

  1. from sklearn.metrics import classification_report
  2. y_true = [0, 1, 2, 2, 2]
  3. y_pred = [0, 0, 2, 2, 1]
  4. target_names = ['class 0', 'class 1', 'class 2']
  5. print(classification_report(y_true, y_pred, target_names=target_names))

输出:

  1. precision recall f1-score support
  2. class 0 0.50 1.00 0.67 1
  3. class 1 0.00 0.00 0.00 1
  4. class 2 1.00 0.67 0.80 3
  5. avg / total 0.70 0.60 0.61 5
  6. accuracy 0.60 5
  7. macro avg 0.50 0.56 0.49 5
  8. weighted avg 0.70 0.60 0.61 5

其中列表中,precisionrecallf1-score 三列分别为各个类别的精确度/召回率及 **F1**
左边的一列为分类的标签名,右边 support 列为每个标签的出现次数。avg / total 行为各列的均值(support 列为总和)。
accuracy:计算所有数据下的指标值,假设全部数据 5 个样本中有 3 个预测正确,所以 accuracy3/5 = 0.6
macro avg:每个类别评估指标未加权的平均值,比如精确率的 macro avg(0.50+0.00+1.00)/3=0.5
weighted avg:加权平均,就是测试集中样本量大的,我认为它更重要,给他设置的权重大点;比如第一个值的计算方法,(0.50*1 + 0.0*1 + 1.0*3)/5 = 0.70

精确度 / 召回率 / F1 值

详见:
语雀:机器学习常见的几种评价指标:精确率(Precision)、召回率(Recall)、准确率(Accuracy)、F值(F-measure)、ROC 曲线、AUC