【sklearn】详解classification_report的分类报告计算

简介

说来惭愧,好久不写博客,让我动笔的竟然是sklearn一个小小的api功能,以前评价模型用的都是总体的准确率,第一次用sklearn提供的分类报告功能竟然搞不懂是怎么计算的,怎么还分类别。就像下面这样:
在这里插入图片描述

嗯,这都啥呀?老实说第一次看我只看懂了准确率即accuracy是怎么计算的。。。

计算

首先y_true是真实结果,y_pred是预测出的标签,它们分别如下:

y_true
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
y_pred
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1,
       0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
       0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1])

闲着没事干的可以自己数数,这边统计出来的结果是:
实际情况中,前68个样本为0类别,后32个样本为1类别。
预测中,前68个样本中有11个被预测为了1类别,后32个样本中有8个被预测为了0类别。

那么我们先说分类报告中最右边的support为什么是68和32。
support意思为支持,也就是说真实结果中有多少是该类别。那么有68个为0类别,32个为1类别。
在左边的召回率里,分母为support个数。

那么0类别里召回率即recall的计算为:
(68-11)/68=0.8382,保留两位小数为0.84。
同理1类别中:
(32-8)/32=0.75。
意思为 实际为x的类别中,有多少预测为x。

而精准率即precision的区别在于分母不同:
此时的分母为预测样本分类。
0类别:
57/65=0.8769,保留两位小数为0.88。
1类别:
24/35=0.6857,保留两位小数为0.69。
意思为 预测为x的样本中,有多少被正确预测为x。

解决了这两个,剩下的就很好懂了。
F1分数=2 * precision * recall /(precision+recall)。
accuracy=(100-11-8)/100。
注:准确率(accuracy)即全部样本里被分类正确的比例。
macro avg = 上面类别各分数的直接平均
注:如精准率的macro avg=(0.88+0.69)/2约等于0.78。
weighted avg=上面类别各分数的加权(权值为support)平均
注:如精准率的weighted avg=(0.88x68+0.69*32)/100约等于0.82。

总结:纸上得来终觉浅,很多理论知识学了就忘,其实还是缺乏实践。
实践是发现问题的最好途径。
  • 34
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值