python- sklearn 计算召回率(Recall)

31 篇文章 4 订阅
19 篇文章 0 订阅

python - sklearn 计算召回率

因为最近写的分类模型需要性能评价 ,常用的分类性能评价有 查准率、召回率、准确率、F1

分类问题的常用的包 sklearn ,下面对召回率所用的方法进行介绍

查准率 请看另外一篇文章: sklearn 计算查准率

前提知识

对于我们的二分类问题,会有以下情况:

  • 真正例(True Positive,TP):真实类别为正例,预测类别为正例。
  • 假正例(False Positive,FP):真实类别为负例,预测类别为正例。
  • 假负例(False Negative,FN):真实类别为正例,预测类别为负例。
  • 真负例(True Negative,TN):真实类别为负例,预测类别为负例。

然后可以构建混淆矩阵(Confusion Matrix)如下表所示。

真实类别预测类别预测类别
正例负例
正例TPFN
负例FPTN

召回率,又称查全率(Recall,R):
R = T P / ( T P + F N ) R=TP/(TP+FN) R=TP/(TP+FN)

1、sklearn.metrics.recall_score()方法

方法说明:

sklearn.metrics.recall_score(y_true, y_pred, *, labels=None, pos_label=1,average='binary', sample_weight=None,zero_division="warn"):

参数介绍:

  • y_true:真实的标签,即数据集中真实的分类标签情况,是一个1维的数组

  • y_pred:预测标签,即模型预测的分类标签情况,是一个1维的数组

  • labels:可选参数,默认为None ,是一个一维的数组, 二分类时,不需要用这个参数。

  • pos_label:字符串或者int类型,默认值是1,如果average='binary且数据是二分类,则需要报告的类,如果数据是多类或多标签的,这将被忽略;设置labels=[pos_label]average != 'binary将只报告该标签的分数。

  • average:字符串类型,取值为 [None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]。默认为binary,给出正样本的准确率,也就是pos_label默认参数1时的准确率。

  • sample_weight:数组类型,样本的权重

  • zero_division:取值为 [“warn”, ‘0’ , ‘1’] ,设置存在零除法时返回的值,warn也相等于是0,但是会出现警告

2、sklearn.metrics.recall_score()的使用举例(二分类)

在二分类问题上,使用这个非常简单,因为方法中很多参数都是针对 二分类 默认的参数,不需要额外指定

例如:pos_label 默认为1呀(二分类正样本的值),average为 二分类 binary

只需要 传入预测的真实的 标签,即可求出准确率

from sklearn.metrics import recall_score

pred = [0, 1, 0, 1] # 预测的值
target = [0, 1, 1, 0] # 真实的值

r = recall_score(pred, target)

print(r)

===> 0.5

如果不是 0 1 的值,是其他二分类的值,那么就可以通过 labelspos_label 来指定

labels = [3,4]  # 二分类 两个类别的值

pred = [3, 4, 3, 4] # 预测的值

target = [3, 4, 4, 3] # 真实的值

r = recall_score(pred, target , labels = labels , pos_label= 3) # pos_label指定正样本的值是多少

print(r)

===> 0.5

2、sklearn.metrics.recall_score() 的使用举例(多分类)

针对多分类问题,各个参数的传参:

  • labels :需要是传入 多分类的 类别数组
  • pos_label:该值会被忽略
  • average:取值 ‘micro’, ‘macro’, ‘samples’, ‘weighted’
  • sample_weight:权重

举例:

labels = [1, 2, 3, 4] # 有哪几类

pred = [1, 2, 3, 4, 2, 3, 4, 1] # 预测的值

target = [2, 3, 1, 4, 1, 4, 4, 1] # 真实的值

r = recall_score(pred, target, labels=labels, average="micro")

print(r)
r = recall_score(pred, target, labels=labels, average="macro")

print(r)
r = recall_score(pred, target, labels=labels, average="weighted")

print(r)

===>0.375
===>0.375
===>0.375

这里主要的是 average 的不同,计算结果会有不同

  • macro:是先对每一个类统计指标值,然后在对所有类求算术平均值。
  • micro:是对数据集中的每一个实例不分类别进行统计建立全局混淆矩阵,然后计算相应指标
  • weightes:计算每个标签的指标,并找到它们的平均加权支持度
  • samples:计算每个实例的指标,并找到它们的平均值

比较常用的是 macromicro 这两种取值

1)macro 是先对每一个类统计指标值,然后利用下面的公式对所有类求算术平均值,
M a c r o R = ( 1 / n ) ( R 1 + R 2 + R 3 + . . . . + R n ) MacroR=(1/n)(R1+R2+R3+....+Rn) MacroR=(1/n)(R1+R2+R3+....+Rn)
2)micro 是对数据集中的每一个实例不分类别进行统计建立全局混淆矩阵,然后计算相应指标
M i c r o R = ( T P 1 + T P 2 + T P 3 + . . . . T P n ) / ( ( T P 1 + T P 2 + T P 3 + . . . . T P n ) + ( F N 1 + F N 2 + F N 3 + . . . . F N n ) ) MicroR=(TP1+TP2+TP3+....TPn)/((TP1+TP2+TP3+....TPn)+(FN1+FN2+FN3+....FNn)) MicroR=TP1+TP2+TP3+....TPn/(TP1+TP2+TP3+....TPn+FN1+FN2+FN3+....FNn)
根据不同的值,计算不同的 recall

  • 10
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python中,精确率和召回率是用于衡量分类模型性能的评价指标之一。精确率衡量了模型预测为正类的样本中真正为正类的比例,而召回率衡量了模型能够正确预测为正类的比例。 在给定的代码中,精确率和召回率是在评价函数`evaluation`中计算得出的。在`evaluation`函数中,使用了`classification_report`函数计算了多个评价指标,包括精确率、召回率等。精确率通过`classification_report`函数返回的字典中的`weighted avg`部分进行提取,而召回率同样也是通过`classification_report`函数返回的字典中的`weighted avg`部分进行提取。 因此,如果你想获取精确率和召回率的值,你可以调用`evaluation`函数,并将预测结果和真实标签作为参数传入该函数。函数将返回一个元组,其中包含精确率、召回率等评价指标的值。 请注意,这些函数的具体实现可能依赖于`sklearn`库中的版本和函数的参数设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python计算分类问题的评价指标(准确率、精确度、召回率和F1值,Kappa指标)](https://blog.csdn.net/weixin_46277779/article/details/129338660)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值