在机器学习领域,如果把Accuracy作为衡量模型性能好坏的唯一指标,可能会使我们对模型性能产生误解,尤其是当我们模型输出值是一个概率值时,更不适宜只采取Accuracy作为衡量模型性泛化能的指标.这篇博文会为大家介绍两种比较二分决策模型性能的方法PR曲线, ROC曲线

预测概率

对于分类问题我们可以直接预测输入数据的类别,或者我们也可以为测试样本产生一个实值或概率预测,并将这个预测值与一个分类阈值作比较,比如说默认阈值为0.5,那么对于输出概率在[0.0.49]的样本会被预测为负,对于输出概率在 [0.5,1.0]之间的样本会被预测为正.同时我们可以通过更改阈值来调整模型在某个问题上的预测性能.

对于二分类问题,主要有两类错误

  • False Negative(假反例):一个正例被错误的预测为反例
  • False Positive(假正例):一个反例给错误的预测为正例

利用概率预测结果并设置合适的阈值我们就可以在这两种错误之间取得平衡.具体来说我们先根据这个实值或者是概率预测结果对测试样本进行排序,"最可能"是正例的排在最前边或者说最左边,"最不可能"是正例的排在最后边或者说最右边,通过调整阈值在这个排序数组中的位置将样本分为两个部分,阈值左边被预测为正例,阈值右侧被预测为反例.如果我们希望提高模型的查准率/降低假正率,即提高预测为正例的样本里实际结果也为正例的样本的占比,我们就可以把这个阈值向左移;如果我们希望提高模型的查全率/降低假反例,即提高实际为正例的样本中预测结果也为正例的样本的占比,那么我们就可以把这个阈值向左移.

排序本身的好坏体现了综合考虑学习器在一般情况下泛化性能的好坏.ROC则是从这个角度出发来研究学习器泛化性能的有力工具.     --<机器学习> 周志华

ROC曲线

什么是ROC

接收器操做特征曲线,也叫ROC曲线,根据wikipedia的解释:

在信号检测理论中,接收者操作特征曲线receiver operating characteristic curve,或者叫ROC曲线)是一种坐标图式的分析工具,用于 (1) 选择最佳的信号侦测模型、舍弃次佳的模型。 (2) 在同一模型中设定最佳阈值。

ROC曲线首先是由二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具(飞机、船舰),也就是信号检测理论。之后很快就被引入了心理学来进行信号的知觉检测。数十年来,ROC分析被用于医学、无线电、生物学、犯罪心理学领域中,而且最近在机器学习(machine learning)和数据挖掘(data mining)领域也得到了很好的发展。

如何理解ROC

在衡量学习器的泛化性能时,根据学习器的预测结果对样本排序,按此顺序逐个把样本作为正例进行输出,每次计算测试样本的真正率TPR,和假正率FPR并把这两项作为ROC的纵轴和横轴.其中真正率衡量实际值为正例的样本中被正确预测为正例的样本的比例,假正率表示实际值为负例的样本中被错误的预测为正例的样本的比例

具体来说,假设有一个逻辑回归分类器,根据它的预测结果对样例排序,我们设初始阈值为最大, 此时所有样本都被预测为反例,没有样本被预测为正例即TP = 0, FP = 0, TPR = 0, FPR = 0; 之后我们不断调小阈值,在这个过程中被正确预测为正例的样本和被错误预测为正例的样本都在不断增多 , 同时被正确预测为反例的样本和被错误预测为反例的样本不断减小.因此TPR和FPR会不断变大.当阈值为最小时,所有样本被预测为正,没有样本被预测为负即FN =0, TN = 0, TPR = 1, FPR = 1; 根据这一系列阈值我们可以得到一系列一一对应的真正率和假正率.

当上图中的ROC曲线接近于(1,0)点,表明模型泛化性能越好,越接近对角线的时候,表明此时模型的预测结果为随机预测结果.

在实际中ROC曲线没有这么光滑,更多的会接近下图的样子,下图中的橙色曲线上每一个点对应于一个阈值下的真正率和假正率(图片来自网络

优点

ROC在以下几个方面会很有用

  1. 可以利用ROC曲线对不同模型进行比较,如果一个模型的ROC曲线被另一个模型的曲线完全包住,则可断言后者的性能由于前者
  2. ROC曲线下方的面积(AUC)可以用来作为评估模型模型性能的指标.如当两个模型的ROC曲线发生交叉,则很难说哪一个模型更好,这时候可以用AUC来作为一个比较合理的判据

问题

尽管ROC用处很大但是如果我们的数据中类别分布非常不均衡的时候,ROC就不再适用了.

下图(a)代表ROC曲线图(b)代表PR曲线,图中的曲线都来为同样的模型在一个非均衡测试集上的预测结果.对于ROC曲线来说越靠近左上方表明模型性能越好,图(a)中的ROC曲线表明模型性能非常好;对于PR曲线来说越靠近右上方说明模型性能越好,但是看图(b)中的曲线,很显然这两个模型都还有很大的提升空间.同时从图(a)中我们可以看出两种算法性能接近,都表现优异,但是图(b)中Algorithm2的性能表现要明显优于Algorithm1.

造成这种情况的原因是我们的测试数据集中的反例数目远远多于正例的数目,假设负样本:正样本=1000:10.在这种情况下,当阈值为最大时,真正率和假正率还是都为0,随着我们不断调小阈值真正率和假正率还是在不断提高, 当阈值最小时真正率和假正率达到最大.因此ROC曲线没有很好地体现出样本类别分布不平衡对模型产生的影响,甚至导致对模型性能有错误的解释.这种情况下PR曲线可以给我们提供更精确的参考.

Precision-Recall (PR)

什么是PR曲线

PR曲线常被用在信息提取领域,同时当我们的数据集中类别分布不均衡时我们可以用PR曲线代替ROC.PR曲线的横轴代表查全率,实际上就是真正率,纵轴代表查准率,表示预测为正例的样本里实际也为正例的样本所占的比例.对于查准率和查全率的理解可以参考我的上一篇博文机器学习--如何理解Accuracy, Precision, Recall, F1 score

如何理解PR曲线

与ROC曲线类似,我们根据学习器的预测结果对样例排序,"最可能"是正例的排在最前边或者说最左边,"最不可能"是正例的排在最后边或者说最右边.按此顺序逐个把样本作为正例进行输出,每次计算测试样本的查准率和查全率并把这两项作为PR曲线的纵轴和横轴.

图片来源于周志华老师的<机器学习>一书.

当PR曲线越靠近右上方时,表明模型性能越好,与ROC曲线类似,在对不同模型进行比较时,若一个模型的PR曲线被另一个模型的PR曲线完全包住则说明后者的性能优于前者.如上图中橘色线代表的模型要优于蓝色线代表的模型,若模型的PR曲线发生了交叉,则无法直接判断哪个模型更好.在周志华老师的机器学习上中提到了可以用平衡点.它是查准率=查全率时的取值,如上图黑色线代表的模型的平衡点要大于橘色线模型代表的平衡点,表明前者优于后者,除此之外更为常用的是F1 score,也就是查准率和查全率的加权平均,F1 = (2*查准率*查全率)/(查准率+查全率)

如何选择

  • ROC曲线:如果我们的测试数据集类别分布大致均衡的时候我们可以用ROC曲线
  • PR曲线:当数据集类别分布非常不均衡的时候采用PR曲线

reference The Relationship Between Precision-Recall and ROC Curves

How to Use ROC Curves and Precision-Recall Curves for Classification in Python

<机器学习> 周志华

机器学习--PR曲线, ROC曲线的更多相关文章

  1. PR曲线 ROC曲线的 计算及绘制

    在linear model中,我们对各个特征线性组合,得到linear score,然后确定一个threshold,linear score < threshold 判为负类,linear sc ...

  2. ROC曲线、PR曲线

    在论文的结果分析中,ROC和PR曲线是经常用到的两个有力的展示图. 1.ROC曲线 ROC曲线(receiver operating characteristic)是一种对于灵敏度进行描述的功能图像. ...

  3. ROC曲线 VS PR曲线

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...

  4. [机器学习]-分类问题常用评价指标、混淆矩阵及ROC曲线绘制方法

    分类问题 分类问题是人工智能领域中最常见的一类问题之一,掌握合适的评价指标,对模型进行恰当的评价,是至关重要的. 同样地,分割问题是像素级别的分类,除了mAcc.mIoU之外,也可以采用分类问题的一些 ...

  5. 绘制ROC曲线

    什么是ROC曲线 ROC曲线是什么意思,书面表述为: "ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果的图表." 好吧,这很不直观.其实就是一个二维曲线 ...

  6. 分类问题(四)ROC曲线

    ROC曲线 ROC曲线是二元分类器中常用的工具,它的全称是 Receiver Operating Characteristic,接收者操作特征曲线.它与precision/recall 曲线特别相似, ...

  7. ROC曲线、KS曲线

    一.ROC曲线 ROC曲线由混淆矩阵为基础数据生成. 纵坐标:真阳性比率TPR,预测为正占真正为正的比例. 横坐标:假阳性比率FPR,预测为正占真正为负的比例. 除了roc曲线的纵横坐标外,还有一个准 ...

  8. 精确率与召回率,RoC曲线与PR曲线

    在机器学习的算法评估中,尤其是分类算法评估中,我们经常听到精确率(precision)与召回率(recall),RoC曲线与PR曲线这些概念,那这些概念到底有什么用处呢? 首先,我们需要搞清楚几个拗口 ...

  9. PR曲线,ROC曲线,AUC指标等,Accuracy vs Precision

    作为机器学习重要的评价指标,标题中的三个内容,在下面读书笔记里面都有讲: http://www.cnblogs.com/charlesblc/p/6188562.html 但是讲的不细,不太懂.今天又 ...

随机推荐

  1. dart2native 使用Dart 在macOS,Windows或Linux上创建命令行工具

    下载dart2.6以上 >dart2native --help 编写源文件 // bin\main.dart main(List<String> args) { print('hel ...

  2. APC体育公司重视“女性经济 ”深度挖掘女性市场

    据消费者追踪服务调查数据显示,从2020年1月到8月,a private company体育公司(公司编号:08703733)品牌下的女性运动服装的在线销售额较上一年增长了77%. 女性市场已然成为A ...

  3. 对DevOps的九大误解,是时候纠正了!

    DevOps是开发和运维的结合,有助于集成和自动化测试过程以及部署存储库,还提供了透明度以及灵活性.DevOps的目标如下: ●更快的上市时间(TTM). ●减少各种修复之间的前置时间.●提高部署频率 ...

  4. 你真的知道typeof null的结果为什么是‘object‘吗?

    到目前为止,ECMAScript 标准中定义了8种数据类型,它们分别是Undefined.Null.Number.Boolean.String.Symbol.BigInt.Object. 为了判断变量 ...

  5. django学习-13.通过pk值手动设置数据表主键

    1.前言 通过django框架的Model层来新增数据库表时,如果在需要新增的表字段里任何一个表字段都没设置主键,框架会默认新增一个表字段id并把该表字段id设置为主键. 那么,如果我们想自己动手设置 ...

  6. SQL EXPLAIN解析

    本文转载自MySQL性能优化最佳实践 - 08 SQL EXPLAIN解析 什么是归并排序? 如果需要排序的数据超过了sort_buffer_size的大小,说明无法在内存中完成排序,就需要写到临时文 ...

  7. python进阶(1)Lambda表达式

    Lambda表达式 lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数 语法 函数名 = lambda 参数:返回值 注意点 1.函数的参数可以有多个,多个参数之间用逗号隔 ...

  8. Vue学习笔记-Vue.js-2.X 学习(四)===>脚手架Vue-CLI(基本工作和创建)

    (五) 脚手架Vue-CLI 一 Vue-CLI前提(nodejs和webpack) 二  Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nod ...

  9. C++Template 模版的本质

    我想知道上帝的構思,其他的都祇是細節.                                                                                  ...

  10. HDFS 03 - 你能说说 HDFS 的写入和读取过程吗?

    目录 1 - HDFS 文件的写入 1.1 写入过程 1.2 写入异常时的处理 1.3 写入的一致性 2 - HDFS 文件的读取 2.1 读取过程 2.2 读取异常时的处理 版权声明 1 - HDF ...