一、原理讲解

P-R曲线就是精确率precision vs 召回率recall 曲线,以recall作为横坐标轴,precision作为纵坐标轴。首先解释一下精确率和召回率。

解释精确率和召回率之前,先来看下混淆矩阵,

TN FP
FN TP

把正例正确分类为正例,表示为TP(true positive),把正例错误分类为负例,表示为FN(false negative),

把负例正确分类为负例,表示为TN(true negative), 把负例错误分类为正例,表示为FP(false positive)

精确率和召回率可以从混淆矩阵中计算而来,precision = TP/(TP + FP), recall = TP/(TP +FN)

那么P-R曲线是怎么来的呢?

算法对样本进行分类时,都会有置信度,即表示该样本是正样本的概率,比如99%的概率认为样本A是正例,1%的概率认为样本B是正例。通过选择合适的阈值,比如50%,对样本进行划分,概率大于50%的就认为是正例,小于50%的就是负例。

通过置信度就可以对所有样本进行排序,再逐个样本的选择阈值,在该样本之前的都属于正例,该样本之后的都属于负例。每一个样本作为划分阈值时,都可以计算对应的precision和recall,那么就可以以此绘制曲线。那很多书上、博客上给出的P-R曲线,都长这样

当然,这种曲线是有可能的。但是仔细琢磨就会发现一些规律和一些问题。

根据逐个样本作为阈值划分点的方法,可以推敲出,recall值是递增的(但并非严格递增),随着划分点左移,正例被判别为正例的越来越多,不会减少。而精确率precision并非递减,二是有可能振荡的,虽然正例被判为正例的变多,但负例被判为正例的也变多了,因此precision会振荡,但整体趋势是下降。

另外P-R曲线肯定会经过(0,0)点,比如讲所有的样本全部判为负例,则TP=0,那么P=R=0,因此会经过(0,0)点,但随着阈值点左移,precision初始很接近1,recall很接近0,因此有可能从(0,0)上升的线和坐标重合,不易区分。如果最前面几个点都是负例,那么曲线会从(0,0)点开始逐渐上升。

曲线最终不会到(1,0)点。很多P-R曲线的终点看着都是(1,0)点,这可能是因为负例远远多于正例。

最后一个点表示所有的样本都被判为正例,因此FN=0,所以recall = TP/(TP + FN) = 1, 而FP = 所有的负例样本数,因此precision = TP/(TP+FP) = 正例的占所有样本的比例,故除非负例数很多,否则precision不会为0.

二、通过PR曲线判断分类器性能


如果一个学习器的P-R曲线被另一个学习器的P-R曲线完全包住,则可断言后者的性能优于前者,例如上面的A和B优于学习器C。但是A和B的性能无法直接判断,我们可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点或者是F1值。平衡点(BEP)是P=R时的取值,如果这个值较大,则说明学习器的性能较好。而F1 = 2 * P * R /( P + R ),同样,F1值越大,我们可以认为该学习器的性能较好。

补充

  1. ROC曲线(类似于PR曲线的另一种曲线)中,越接近左上角的曲线越好
  2. AUC (Area under Curve):ROC曲线下的面积,介于0.1和1之间,作为数值可以直观的评价分类器的好坏,值越大越好。
    AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
    0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
    AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值

参考说明

版权声明:本文为CSDN博主「keep_forward」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/b876144622/article/details/80009867

作者:李_颖Biscuit
链接:https://www.jianshu.com/p/ac46cb7e6f87
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

PR曲线原理及通过曲线判断分类器优劣相关推荐

  1. AUC是什么?AUC的的意义是什么?AUC的判断分类器优劣标准是什么?AUC如何计算?

    AUC是什么?AUC的的意义是什么?AUC的判断分类器优劣标准是什么?AUC如何计算? metrics.roc_auc_score metrics.roc_curve AUC就是曲线下面积,在比较不同 ...

  2. 分类器MNIST交叉验证准确率、混淆矩阵、精度和召回率(PR曲线)、ROC曲线、多类别分类器、多标签分类、多输出分类

    本博客是在Jupyter Notebook下进行的编译. 目录 MNIST 训练一个二分类器 使用交叉验证测量精度 混淆矩阵 精度和召回率 精度/召回率权衡 ROC曲线 多类别分类器 错误分析 多标签 ...

  3. det曲线_11565 P-R、ROC、DET 曲线及 AP、AUC 指标全解析(上)

    机器学习中,最「简单」的一种任务就是二分类任务了.比如,说话人验证(speaker verification)就是一个二分类任务:判断一句话是否是给定说话人说的.再比如,信息检索(informatio ...

  4. Bezier曲线原理及实现代码(c++)

    一.原理: 贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计.贝塞尔曲线最初由 Paul de Casteljau 于 ...

  5. Bezier曲线原理

    一.原理: 贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计.贝塞尔曲线最初由Paul de Casteljau 于1 ...

  6. Bezier曲线原理—动态解释

    Bezier曲线原理 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线.一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖 ...

  7. 贝塞尔曲线原理(简单阐述)

    贝塞尔曲线原理(简单阐述) https://www.cnblogs.com/hnfxs/p/3148483.html 原理和简单推导(以三阶为例): 设P0.P02.P2是一条抛物线上顺序三个不同的点 ...

  8. python 贝塞尔曲线,贝塞尔曲线原理分析及其Android的实现

    本文主要内容为贝塞尔曲线原理解析并用 SurfaceView 实现其展示动画 关于SurfaceView 的使用,大家可以看我的上一篇文章 Android:SurfaceView 的使用(附代码模板) ...

  9. Bezier曲线原理及其代码实现

    Bezier曲线原理及实现代码(c++) 一.原理: 贝塞尔曲线于1962年,由法国工程师皮埃尔?贝塞尔(Pierre B?zier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计.贝塞尔曲线最初 ...

最新文章

  1. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题
  2. Android语音信号波形显示
  3. 深入了解 TabNet :架构详解和分类代码实现
  4. 浏览器如何渲染页面?
  5. java jsoup解析html标签_jsoup解析html
  6. RHEL7 yum源配置
  7. android -上传文件到服务器
  8. Unity工程中 .Meta 文件的来龙去脉
  9. repo/git下载android源码断后重新下载
  10. 解决idea的程序包错误:程序包XXX不存在的问题
  11. Mac下实现Word文档批量转换为PDF
  12. 【Unity】Unity Shader学习笔记(一)Unity Shader基础
  13. 推荐几个在线SQL编程的网站,良心!
  14. RDL和RDLC性能比较
  15. 官宣 | 首届云原生编程挑战赛报名通道正式开启
  16. 无法安装net framework 3.5 的解决方法
  17. 周期训练理论与方法pdf_周期_PDF图书下载_(美) 图德·邦帕 (Tudor O.Bompa) (美)_免费PDF电子书下载_第一图书网...
  18. Python遥感影像SAR分割裁剪多张小影像
  19. 【FOFA】fofa搜索引擎的常用搜索语法
  20. 文本溢出及其在angular中失效的bug

热门文章

  1. [附源码]计算机毕业设计JAVA基于Java小区电信计费管理系统
  2. vue中实现图片懒加载的方法(一)
  3. 传奇GOM引擎微端架设教程
  4. 王者荣耀微信哪个服务器人最少,王者荣耀:一句话总结q区和微信区玩家的区别,简直不要太真实...
  5. 斗鱼主播都在使用的可取回的CSGO开箱子网站推荐!
  6. C++中的类——类的定义和声明
  7. [经验教程]2022年淘宝天猫618超级红包预售活动是什么时候开始及2022年天猫淘宝618预售超级红包怎么领取参加活动
  8. oracle执行存储过程06576,Oracle中执行存储过程call和exec区别
  9. OSError: [Errno 22] Invalid argument错误解决方案
  10. RedisTemplate 分布式锁之使用守护线程为key续命