参考来源:
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值等信息。
sklearn.metrics.classification_report(y_true, y_pred,
labels=None, target_names=None,
sample_weight=None, digits=2, output_dict=False)
主要参数:**y_true**
:1 维数组,或标签指示器数组/稀疏矩阵,类别的真实标签值,类标签的列表。**y_pred**
:1 维数组,或标签指示器数组/稀疏矩阵, 预测值的标签,类标签的列表,分类器返回的估计值。**labels**
:array
,shape = [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
用法示例:
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
avg / total 0.70 0.60 0.61 5
accuracy 0.60 5
macro avg 0.50 0.56 0.49 5
weighted avg 0.70 0.60 0.61 5
其中列表中,precision
、recall
、f1-score
三列分别为各个类别的精确度/召回率及 **F1**
值
左边的一列为分类的标签名,右边 support
列为每个标签的出现次数。avg / total
行为各列的均值(support
列为总和)。accuracy
:计算所有数据下的指标值,假设全部数据 5
个样本中有 3
个预测正确,所以 accuracy
为 3/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