python 召回率_召回率与精确率

python 召回率_召回率与精确率工业界往往会根据实际的业务场景拟定相应的业务指标 本文旨在一起学习比较经典的三大类评价指标 其中第一 二类主要用于分类场景 第三类主要用于回归预测场景 基本思路是从概念公式 到优缺点 再到具体应用 分类问题 本文以二分类为例 1 准确率 P 召回率 R F1 值定义准确率 Precision P TP TP FP 通俗地讲 就是预测正确的正例数据占预测为正例数据的比例 召回率 Recall

工业界往往会根据实际的业务场景拟定相应的业务指标。本文旨在一起学习比较经典的三大类评价指标,其中第一、二类主要用于分类场景、第三类主要用于回归预测场景,基本思路是从概念公式,到优缺点,再到具体应用(分类问题,本文以二分类为例)。

1.准确率P、召回率R、F1 值

定义 准确率(Precision):P=TP/(TP+FP)。通俗地讲,就是预测正确的正例数据占预测为正例数据的比例。

召回率(Recall)也叫查全率,可以认为查得全不全:R=TP/(TP+FN)。通俗地讲,就是预测为正例的数据占实际为正例数据的比例

F1值(F score):

思考

正如下图所示,F1的值同时受到P、R的影响,单纯地追求P、R的提升并没有太大作用。在实际业务工程中,结合正负样本比,的确是一件非常有挑战的事。

图像展示

下面附上源码

importnumpy as npimportmatplotlib.pyplot as pltfrom mpl_toolkits.mplot3d importAxes3Dfrom matplotlib importcm

fig=plt.figure()

ax= fig.add_subplot(111,projection=’3d’)

x= np.linspace(0,1,100)

p,r= np.meshgrid(x,x) #meshgrid函数创建一个二维的坐标网络

z = 2*p*r/(p+r)

ax.plot_surface(x,y,z,rstride=4,cstride=4,cmap=cm.YlGnBu_r)

ax.set_title(‘F1’) #标题

ax.set_xlabel(‘precision’) #x轴标签

ax.set_ylabel(‘recall’) #y轴标签

plt.show()

2.ROC、AUC

概念

TPR=TP/(TP+FN)=TP/actual positives

FPR=FP/(FP+TN)=FP/actual negatives

ROC是由点(TPR,FPR)组成的曲线,AUC就是ROC的面积。AUC越大越好。

一般来说,如果ROC是光滑的,那么基本可以判断没有太大的overfitting

图像展示

附上代码

library(ROCR)

p=c(0.5,0.6,0.55,0.4,0.7)

y=c(1,1,0,0,1)

pred=prediction(p, y)

perf= performance(pred,”tpr”,”fpr”)

plot(perf,col=”blue”,lty=3, lwd=3,cex.lab=1.5, cex.axis=2, cex.main=1.5,main=”ROC plot”)

python版本计算AUC

from sklearn importmetricsdefaucfun(act,pred):

fpr, tpr, thresholds= metrics.roc_curve(act, pred, pos_label=1)return metrics.auc(fpr, tpr)

直接利用AUC优化分类任务(R语言版)

下面是代码

#生成训练数据

set.seed(1999)

x1= rnorm(1000)

x2= rnorm(1000)

z= 1 + 2*x1 + 3*x2

pr= 1/(1+exp(-z))

y= rbinom(1000,1,pr)#使用logloss作为训练目标函数

df = data.frame(y=y,x1=x1,x2=x2)

glm.fit=glm( y~x1+x2,data=df,family=”binomial”)#下面使用auc作为训练目标函数

library(ROCR)

CalAUC

rocr.pred=prediction(pred,real)

rocr.perf=performance(rocr.pred,’auc’)

as.numeric()

}#初始值

beta0=c(1,1,1)

loss

z=beta[1]+beta[2]*x1+beta[3]*x2

pred=1/(1+exp(-z))-CalAUC(y,pred)

}

res=optim(beta0,loss,method = “Nelder-Mead”,control = list(maxit = 100))

3.PRC、ROC比较

AUC是ROC的积分(曲线下面积),是一个数值,一般认为越大越好,数值相对于曲线而言更容易当做调参的参照。

PR曲线会面临一个问题,当需要获得更高recall时,model需要输出更多的样本,precision可能会伴随出现下降/不变/升高,得到的曲线会出现浮动差异(出现锯齿),无法像ROC一样保证单调性。

在正负样本分布得极不均匀(highly skewed datasets)的情况下,PRC比ROC能更有效地反应分类器的好坏。

4.mape平均绝对百分误差

定义

技巧

在sklearn中,对于回归任务,一般都提供了mse损失函数(基于树的模型除外)。但有时我们会遇到sklearn中没有定义的损失函数,那么我们可以自定重写模型或者定义函数,下面以xgboost为模型,mape作为损失函数为例(grad、hess分别对应损失函数一阶导、二阶导)。

代码

importnumpy as npimportmatplotlib.pyplot as pltfrom mpl_toolkits.mplot3d importAxes3Dfrom matplotlib importcm

fig=plt.figure()

ax= fig.add_subplot(111,projection=’3d’)

x= np.linspace(0,1,100)

p,r= np.meshgrid(x,x) #meshgrid函数创建一个二维的坐标网络

z = 2*p*r/(p+r)

ax.plot_surface(x,y,z,rstride=4,cstride=4,cmap=cm.YlGnBu_r)

ax.set_title(‘F1’) #标题

ax.set_xlabel(‘precision’) #x轴标签

ax.set_ylabel(‘recall’) #y轴标签

plt.show()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225735.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:39
下一篇 2026年3月17日 上午8:39


相关推荐

  • pstree命令详解

    pstree命令详解pstree 命令是用于查看进程树之间的关系 即哪个进程是父进程 哪个是子进程 可以清楚的看出来是谁创建了谁 pstree 几个重要的参数 A 各进程树之间的连接以 ASCII 码字符来连接 U 各进程树之间的连接以 utf8 字符来连接 某些终端可能会有错误 p 同时列出每个进程的 PID u 同时列出每个进程的所属账号名称 例子 pstree upsystemd 1 agetty 2021 agetty 2022 bash

    2026年3月18日
    2
  • 算法总结——大整数加法

    算法总结——大整数加法问题描述 nbsp 求两个不超过 200 位的非负整数的和 输入数据有两行 每行是一个不超过 200 位的非负整数 没有多余的前导 0 输出要求一行 即相加后的结果 结果里不能有多余的前导 0 即如果结果是 342 那么就不能输出为 0342 nbsp 输入样例输出样例 OutputSample

    2026年3月26日
    2
  • 数据库的简介与类型

    数据库的简介与类型数据库的简介与类型

    2022年4月22日
    39
  • VIF检验相关性「建议收藏」

    VIF检验相关性「建议收藏」VIF可以用来度量多重共线性问题,VIFj=11−Rj2\quad\mathrm{VIF}_{j}=\frac{1}{1-R_{j}^{2}}VIFj​=1−Rj2​1​式子中,Rj2R_{j}^{2}Rj2​是第jjj个变量在所有变量上回归时的确定系数。如果VIF过大(比如大于5或10),则意味着存在多重共线性问题。#数据df=pd.read_excel(io=’数据.xlsx’,sheet_name=0,usecols=range(1,5))#务必注意:一定要加上常数项,#如果没

    2022年4月28日
    142
  • Windows Mobile 6 Professional SDK[通俗易懂]

    Windows Mobile 6 Professional SDK[通俗易懂]WindowsMobile6ProfessionalSDK Lotyong的WindowsMobile6ProfessionalSDKhttp://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Professional%

    2022年7月12日
    15
  • GNU make manual 翻译( 一百一十八)

    GNU make manual 翻译( 一百一十八)

    2022年3月12日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号