sklearn中的函数classification_report

classification_report函数主要用于显示主要分类指标的文本报告

1.前言

在报告中显示每个类的精确度、召回率等信息(可以用来检测回归算法的准确度)。

2.classification_report()参数

详见官方文档,这里只说几个重要参数

y_true:1维数组,目标值

y_pred:1维数组,分类器返回的估计值

label:数组,报告中显示的类标签索引列表

target_names:字符串列表,当和label匹配时作为label的名称

3.classification_report()返回值

混淆矩阵(Confusion Matrix)。

解释一下两个名词

正样本:与你所要研究的目的相关

负样本:与你所要研究的目的无关

举个例子:如果你要做一间教室里的人脸识别,那么正样本就是人脸,负样本就是课桌、门窗之类的

TP(True Positive): 预测为正样本, 实际为正样本(预测正确)

FP(False Positive): 预测为正样本, 实际为负样本 (预测错误)

FN(False Negative): 预测为负样本,实际为正样本 (预测错误)

TN(True Negative): 预测为负样本, 实际为负样本 (预测正确)

精确度(precision)=正确预测的个数(TP)/预测为正样本的个数(TP+FP)

检索结果中,都是你认为应该为正的样本(第二个字母都是P),但是其中有你判断正确的和判断错误的(第一个字母有T ,F)。

召回率(recall)=正确预测值的个数(TP)/实际为正样本的个数(TP+FN)

检索结果中,你判断为正的样本也确实为正的,以及那些没在检索结果中被你判断为负但是事实上是正的,或者说你没预测到的(FN)。

F1值=2*精度*召回率/(精度+召回率)

不明白的话参考以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
In [4]: from sklearn.metrics import classification_report
...: y_true = [1, 2, 3, 3, 3]
...: y_pred = [1, 1, 3, 3, 2]
...: labels =[1,3,2]
...: target_names = ['labels_1','labels_2','labels_3','labels-4']
...: print(classification_report(y_true,y_pred,labels=labels,target_names= t
...: arget_names,digits=3))
...:
precision recall f1-score support

labels_1 0.500 1.000 0.667 1
labels_2 1.000 0.667 0.800 3
labels_3 0.000 0.000 0.000 1

micro avg 0.600 0.600 0.600 5
macro avg 0.500 0.556 0.489 5
weighted avg 0.700 0.600 0.613 5

最右边support列为每个标签的出现次数(权重)。

micro avg:计算所有数据中预测正确的值,比如这里是3/5=0.6

macro avg:每个类别指标中的未加权平均值(一列),比如准确率(precision)的macro avg是:$(0.5+1.0+0)/3=0.5$

weighted avg:每个类别指标中的加权平均,比如准确率(precision)的weighted avg是:$(0.51+1.03+0*1)/3=0.7$

4.参考资料

[1] 博客园

[2] CSDN博客

[3] CSDN博客

[4] CSDN博客——TP、TN、FP、FN解释说明

[5] 读懂 sklearn 的 classification_report

-------------End-------------
梦想总是要有的,万一有人有钱呢?