网站首页 > 技术文章 正文
Precision-Recall曲线
Precision-Recall曲线总结了使用不同概率阈值的预测模型的召回率和精确率之间的权衡。
在介绍AP之前,先引入Precision-Recall曲线概念,如果你想评估一个算法模型的性能,一个比较好的方法就是,通过阈值变化,观察Precision与Recall值的变化情况。
如果一个检测动物是否为狗的算法模型性能比较好,那么它应该有如下的表现:被识别出的图片中狗所占的比重比较大,并且在识别出其它动物之前,尽可能多地正确识别出狗,也就是让Recall值增长的同时保持Precision的值在一个很高的水平。而性能比较差的分类器可能会损失很多Precision值才能换来Recall值的提高。通常情况下,会使用Precision-recall曲线,来显示出分类器在Precision与Recall之间的权衡。
Precision-recall曲线反映了分类器对正例的识别准确程度和对正例的覆盖能力之间的权衡,AP就是PR曲线与X轴围成的图形面积。下面我们以一个具体的例子来了解下PR曲线与AP。
目标检测算法——狗
首先算法模型返回所有测试样本的Score,假设共有20个测试样本,每个的样本结果包含Id,Score、Label信息,在20个动物中,检测算法模型认为阈值大于0.7,认为是狗,否则为其它动物,根据Score降序排序,结果如下:
混淆矩阵如下:
精确率(Precision)
以狗为例,20只动物里,算法模型认为有5只是狗,但是其实这5只狗只有3只预测对了,因此,
召回率(Recall)
以狗为例,20只动物里,有5只狗,而算法模型认为里面只有3只是狗。
我们得到Top-5的结果,前Score最高的前5个样本,Label为1表示正例,即:
在这个例子中,True Positives就是指第1、7、11张图片,False Positives就是指第3,9张图片。排在Top-5之外的元素为False Negatives和True Negatives,即:
其中,False Negatives是指第19,14张图片,True Negatives是指剩下的第5、17、12、2、18……张图片。
那么,这个例子中Precision=3/5=60%,Recall=3/5=60%。
我们通常不满足只通过Top-5来衡量一个模型的好坏,而是需要知道从Top-1到Top-N(N是所有测试样本个数,本文中为20)对应的Precision和Recall。显然随着我们选定的样本越来也多,Recall一定会越来越高,而Precision整体上会呈下降趋势。把Recall为横坐标,Precision为纵坐标,即可得到常用的Precision-Recall曲线。
如上,这是一张排过序的Score,如图所示top20中,1、7、11、14、19为正样本,从上往下,当TopN变化(调整阈值实现TOPN变化),Precision也随之线性变化,当遇到正样本时,Recall才变化,遇到负样本时,Recall不变,当前最大Precision也不变,通过计算不同阈值下的Precision、Recall得到如下结果。
相应的Precision-Recall曲线(这条曲线是呈递减趋势的)如下 。
AP(Average precision)
与AUC相似,AP就是PR曲线与X轴围成的图形面积。AP衡量的是训练的算法模型在每个类别上的好坏,mAP衡量的是训练的算法模型在所有类别上的好坏,得到AP后mAP的计算就变得很简单了,就是取所有AP的平均值。
11-point interpolation
接下来介绍下AP的计算方式,2010年之前PASCAL VOC CHALLENGE采用的方法。首先设定一组阈值,[0, 0.1, 0.2, …, 1]。然后对于Recall大于每一个阈值(比如Recall>0.3),我们都会得到一个对应的最大Precision。这样,我们就计算出了11个precision。AP即为这11个Precision的平均值。这种方法英文叫做11-point interpolated average precision,计算方式如下:
通过计算不同阈值下的Precision、Recall得到如下结果
绘制精确率和召回率,我们得到以下精确率x召回率曲线。
AP=1/11(1+1+1+0.75+0.75+0.75+0.75+0.57+0.57+0.38+0.38) = 0.718
Interpolating all points
自2010年后PASCAL VOC CHALLENGE就换了另一种计算方法。新的计算方法假设这N个样本中有M个正例,那么我们会得到M个recall值(1/M, 2/M, ..., M/M),对于每个Recall值r,我们可以计算出对应(r' >= r)的最大Precision,然后对这M个precision值取平均即得到最后的AP值,计算方法如下:
绘制精确值和召回值,我们有以下内容精度x召回曲线:
AP = 1 / 5 (1+ 0.75 + 0.75 + 0.57 + 0.416 ) = 0.2*1+0.4*0.75+0.2*0.57+0.2*0.416= 0.69
ROC和PR曲线如何选择
当正负样本差距不大的情况下,ROC和PR的趋势是差不多的,但是当负样本很多的时候,两者就截然不同了,ROC效果依然看似很好,但是PR上反映效果一般,因此PR曲线则更适用于不平衡的数据集。
我们通过以下两个例子,具体说明下ROC、PR曲线分别在正负样本相当、悬殊时的表现。
正负样本相当
如下,这是一张排过序的Score,如图所示top20中,1、7、11、14、19为正样本,从上往下,当TopN变化(调整阈值实现TOPN变化),Precision也随之线性变化,当遇到正样本时,Recall才变化,遇到负样本时,Recall不变,当前最大Precision也不变,通过计算不同阈值下的Precision、Recall得到如下结果。
ROC曲线如下:
PR 曲线如下:
正负样本悬殊
如下,这是一张排过序的Score,如图所示top20中,仅2、9为正样本,从上往下,当TopN变化(调整阈值实现TOPN变化),Precision也随之线性变化,当遇到正样本时,Recall才变化,遇到负样本时,Recall不变,当前最大Precision也不变,通过计算不同阈值下的Precision、Recall得到如下结果。
ROC曲线如下:
PR曲线如下:
这时ROC曲线效果依然很好,但是PR曲线则表现的比较差。这就说明PR曲线在正负样本比例悬殊较大时更能反映分类的性能。
另外,对于一个给定的包含正负样本的数据集,ROC空间和PR空间存在一一对应的关系,也就是说,如果recall不等于0,二者包含完全一致的混淆矩阵。我们可以将ROC曲线转化为PR曲线,反之亦然。
同时,对于一个给定数目的正负样本数据集,第一条曲线在ROC空间中比另一条曲线有优势,当且仅当第一条曲线在PR空间中也比第二条曲线有优势。(这里的“一条曲线比其他曲线有优势”是指其他曲线的所有部分与这条曲线重合或在这条曲线之下。)
- 上一篇: 对mAP进行分解,让你了解的更清楚
- 下一篇: 一文带你读懂 SegNet(语义分割)
猜你喜欢
- 2024-09-24 对mAP进行分解,让你了解的更清楚
- 2024-09-24 提升小目标检测的一包围框相似度度量
- 2024-09-24 测试服猴子改动:冲刺会指向目标,百分百ap加成可以玩ap猴子?
- 2024-09-24 YOLOv4:快速高精度目标检测
- 2024-09-24 目标检测中的“神奇指南”——平均精度(mAP)
- 2024-09-24 目标检测CornerNet讲解
- 2024-09-24 深兰科技ACM MM 2020冠军,视频级别目标身份和动态
- 2024-09-24 再也不用预定义目标类别!YOLO-Word:检测任何目标!
- 2024-09-24 难以置信的目标检测小妙招
- 2024-09-24 YoloV:目标实时检测效果依然很棒(附源代码下载)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)