分类模型的评估指标–精确率(precision)与召回率(recall)

分类模型的评估指标–精确率(precision)与召回率(recall)1 几个常用的术语这里首先介绍几个常见的模型评价术语 现在假设我们的分类目标只有两类 计为正例 positive 和负例 negtive 分别是 1 Truepositive TP 被正确地

大家好,欢迎来到IT知识分享网。

预测类别
  Yes No 总计
Yes TP  FN  P (实际为 Yes )
No  FP  TN  N (实际为 No )
总计 P’(被分为 Yes ) N’(被分为 No ) P+N

8)查准率和查全率反映了分类器分类性能的两个方面。如果综合考虑查准率与查全率,可以得到新的评价指标 F1 测试值,也称为综合分类率:

分类模型的评估指标--精确率(precision)与召回率(recall)

为了综合多个类别的分类情况,评测系统整体性能,经常采用的还有微平均 F1(micro-averaging)和宏平均 F1(macro-averaging )两种指标。查准率和查全率是一对矛盾的度量,一般来说,查准率高时,查全率往往偏低,查全率高时,查准率往往偏低,例如,若希望将好瓜尽可能多选出来,则可通过增加选瓜的数量来实现,如果希望将所有的西瓜都选上,那么所有的好瓜必然都被选上了,但这样查准率就会较低;若希望选出的瓜中好瓜比例尽可能高,则可只挑选最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低。

分类模型的评估指标--精确率(precision)与召回率(recall)

如果一个学习器的P-R曲线被另一个学习器的P-R曲线完全包住,则可断言后者的性能优于前者,例如上面的A和B优于学习器C,但是A和B的性能无法直接判断,但我们往往仍希望把学习器A和学习器B进行一个比较,我们可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点或者是F1值。

平衡点(BEP)是查准率=查全率时的取值,如果这个值较大,则说明学习器的性能较好。而F1 = 2 * P * R /( P + R ),同样,F1值越大,我们可以认为该学习器的性能较好。

 

PR  曲线和ROC 曲线

PR

分类模型的评估指标--精确率(precision)与召回率(recall)

Precision-Recall曲线,这个东西应该是来源于信息检索中对相关性的评价,precision就是你预测出来的结果中,TP占据正确预测为正例加上错误预测为正例的比率;recall就是你预测出来的结果中,TP占实际为正例的比率;假设你的测试样本有100个,就是会返回100个precision-recall点,然后把这些点绘制出来,就得到了PR曲线,下面为绘制pr曲线的例子(因为样本数量少,这个折线图看起来有点诡异);

#!/usr/bin/env python # encoding: utf-8 ''' @author: lele Ye @contact: @.com @software: pycharm 2018.2 @file: PR_curve.py @time: 2019/4/29 9:33 @desc: ''' import matplotlib import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import precision_recall_curve plt.figure(1) # 创建图表1 plt.title('Precision/Recall Curve') # give plot a title plt.xlabel('Recall') # make axis labels plt.ylabel('Precision') # y_true和y_scores分别是gt label和predict score y_true = np.array([1,1,0,0,0,1,1,0,1,0,1,0]) y_scores = np.array([0.9,0.8,0.7,0.2,0.4,0.6,0.5,0,0.4,0.3,0.8,0.6]) precision, recall, thresholds = precision_recall_curve(y_true, y_scores) plt.figure(1) plt.plot(precision, recall) plt.savefig('p-r.png') plt.show()

 分类模型的评估指标--精确率(precision)与召回率(recall)

所以,PR曲线的采点是按照样本的数量采的。注意,这一条PR曲线的绘制只对应一个p_0值(也就是分类阈值,当回归结果高于这个阈值时判定为正类),所以往往先选择最优的p_0,再绘制不同model的PR曲线,比较model的优劣。

ROC

分类模型的评估指标--精确率(precision)与召回率(recall)

ROC绘制的就是在不同的阈值p_0(同上面的分类阈值)下,TPR和FPR的点图。所以ROC曲线的点是由不同的p_0所造成的。所以你绘图的时候,就用不同的p_0采点就行。可以看出TPR和Recall的形式是一样的,就是查全率了,FPR就是保证这样的查全率你所要付出的代价,就是把多少负样本也分成了正的了。

import matplotlib import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import roc_curve plt.figure(1) # 创建图表1 plt.title('ROC Curve') # give plot a title plt.xlabel('false/positive') # make axis labels plt.ylabel('true/positive') # y_true和y_scores分别是gt label和predict score y_true = np.array([1,1,0,0,0,1,1,0,1,0,1,0]) y_scores = np.array([0.9,0.8,0.7,0.2,0.4,0.6,0.5,0,0.4,0.3,0.8,0.6]) precision, recall, thresholds = roc_curve(y_true, y_scores) plt.figure(1) plt.plot(precision, recall) plt.savefig('ROC.png') plt.show()

分类模型的评估指标--精确率(precision)与召回率(recall)

对比PR图和ROC图

分类模型的评估指标--精确率(precision)与召回率(recall)

AUC

AUC(Area Under Curve)就是ROC曲线下方的面积。可以知道,TPR越大的情况下,FPR始终很小,才是好的,那么这条曲线就是很靠近纵轴的曲线,那么下方面积就大。AUC面积越大,说明算法和模型准确率越高越好,反映出正样本的预测结果更加靠前。(推荐的样本更能符合用户的喜好)

 

评估选取原则:

在很多实际问题中,正负样本数量往往很不均衡。比如,计算广告领域经常涉及转化率模型,正样本的数量往往是负样本数量的1/1000,甚至1/10000。若选择不同的测试集,P-R曲线的变化就会非常大,而ROC曲线则能够更加稳定地反映模型本身的好坏。所以,ROC曲线的适用场景更多,被广泛用于排序、推荐、广告等领域。

但需要注意的是,选择P-R曲线还是ROC曲线是因实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映其性能。

PR曲线比ROC曲线更加关注正样本,而ROC则兼顾了两者。

当正负样本比例失调时,比如正样本1个,负样本100个,则ROC曲线变化不大,此时用PR曲线更加能反映出分类器性能的好坏。这个时候指的是两个分类器,因为只有一个正样本,所以在画auc的时候变化可能不太大;但是在画PR曲线的时候,因为要召回这一个正样本,看哪个分类器同时召回了更少的负样本,差的分类器就会召回更多的负样本,这样precision必然大幅下降,这样分类器性能对比就出来了。

附注(准确率、召回率、F1计算函数):

# y_true, y_pred # TP = (y_pred==1)*(y_true==1) # FP = (y_pred==1)*(y_true==0) # FN = (y_pred==0)*(y_true==1) # TN = (y_pred==0)*(y_true==0) # TP + FP = y_pred==1 # TP + FN = y_true==1 def precision_score(y_true, y_pred): return ((y_true==1)*(y_pred==1)).sum()/(y_pred==1).sum() def recall_score(y_true, y_pred): return ((y_true==1)*(y_pred==1)).sum()/(y_true==1).sum() def f1_score(y_true, y_pred): num = 2*precison_score(y_true, y_pred)*recall_score(y_true, y_pred) deno = (precision_score(y_true, y_pred)+recall_score(y_true, y_pred)) return num/deno

参考:

1、python绘制precision-recall曲线、ROC曲线

2、分类模型的精确率(precision)与召回率(recall)(Python

3、ROC曲线、AUC、Precision、Recall、F-measure理解及Python实现

4、准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure

5、sklearn官方文档

6、笔试题中计算f-score的案例

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137045.html

(0)
上一篇 2025-06-23 15:20
下一篇 2025-06-23 15:33

相关推荐

发表回复

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

关注微信