roc曲线 订阅
接受者操作特性曲线是指在特定刺激条件下,以被试在不同判断标准下所得的虚报概率P(y/N)为横坐标,以击中概率P(y/SN)为纵坐标,画得的各点的连线。 展开全文
接受者操作特性曲线是指在特定刺激条件下,以被试在不同判断标准下所得的虚报概率P(y/N)为横坐标,以击中概率P(y/SN)为纵坐标,画得的各点的连线。
信息
外文名
receiver operating characteristic curve
又    称
感受性曲线
简    称
ROC曲线
中文名
接受者操作特性曲线
学    科
数学
接受者操作特征曲线ROC曲线简介
接受者操作特性曲线(receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以虚惊概率为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线 [1]  。
收起全文
精华内容
下载资源
问答
  • ROC曲线学习总结

    万次阅读 多人点赞 2019-08-19 15:22:38
    文章目录ROC曲线学习总结1. ROC曲线(Receiver Operating Characteristic)的概念和绘制2. 利用ROC曲线评价模型性能——AUC(Area Under Curve)3. 利用ROC曲线选择最佳模型3.1 不同模型之间选择最优模型3.2 同一模型中...

    ROC曲线学习总结

    最近在学习机器学习基础知识部分的时候,看到了用于评估模型性能的ROC曲线,想起来之前上课的时候听老师提起过,当时没有认真去看,所以这次大体上了解了一下,来谈谈自己的看法,并做些总结。

    1. ROC曲线(Receiver Operating Characteristic)的概念和绘制

    ​ ROC的全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,首先是由二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具(飞机、船舰),也就是信号检测理论。之后很快就被引入了心理学来进行信号的知觉检测。此后被引入机器学习领域,用来评判分类、检测结果的好坏。因此,ROC曲线是非常重要和常见的统计分析方法。

    首先介绍一下在模型评估上的一些基本概念:

    真实情况 预测结果 含义 统计量
    正例 反例
    正例 TP(将正例正确预测为正例) FN(将正例错误预测为负例) TP + FN 表示实际数据集中正样本的数量 召回率Recall / 灵敏度Sensitivity / TPR = TP/(TP+FN), 漏诊率 = 1 - 灵敏度
    反例 FP(将负例错误的预测为正例) TN(将负例正确的预测为负例) FP + TN 表示实际数据集中负样本的数量 FPR = FP/(FP+TN), 特异度(Specificity) = 1 - FPR = TN/(FP+TN)
    加和含义 TP + FP 表示预测的正类样本数 FN + TN 表示预测的负类样本数 TP + FN + FP + TN 表示样本总数
    统计量 精确率Precision = TP/(TP+FP) 正确率Accuracy = (TP+TN)/(TP+TN+FP+FN), 错误率 = (FP+FN)/(TP+TN+FP+FN), F-measure = 2*(Precision*Recall)/(Precision+Recall)

    其中最重要的两个公式如下:

    TPR=TPTP+FN,FPR=FPFP+TN TPR = \frac{TP}{TP+FN} ,FPR = \frac{FP}{FP+TN}

    在ROC曲线图中,每个点以对应的FPRFPR值为横坐标,以TPRTPR值为纵坐标

    ROC曲线的绘制步骤如下:

    1. 假设已经得出一系列样本被划分为正类的概率Score值,按照大小排序。
    2. 从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于某个样本,其“Score”值为0.6,那么“Score”值大于等于0.6的样本都被认为是正样本,而其他样本则都认为是负样本。
    3. 每次选取一个不同的threshold,得到一组FPR和TPR,以FPR值为横坐标和TPR值为纵坐标,即ROC曲线上的一点。
    4. 根据3中的每个坐标点,画图。

    ROC曲线绘制实例

    1、分析数据
    y_true = [0, 0, 1, 1];scores = [0.1, 0.4, 0.35, 0.8];
    2、列表

    样本 预测属于P的概率(score) 真实类别
    y[0] 0.1 N
    y[1] 0.4 N
    y[2] 0.35 P
    y[3] 0.8 P

    3、将截断点依次取为score值,计算TPR和FPR。
    当截断点为0.1时:
    说明只要score>=0.1,它的预测类别就是正例。 因为4个样本的score都大于等于0.1,所以,所有样本的预测类别都为P。
    scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [1, 1, 1, 1];
    正例与反例信息如下:

    正例 反例
    正例 TP=2 FN=0
    反例 FP=2 TN=0

    由此可得:
    TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 1;

    当截断点为0.35时:
    scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 1, 1];
    正例与反例信息如下:

    正例 反例
    正例 TP=2 FN=0
    反例 FP=1 TN=1

    由此可得:
    TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 0.5;

    当截断点为0.4时:
    scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 0, 1];
    正例与反例信息如下:

    正例 反例
    正例 TP=1 FN=1
    反例 FP=1 TN=1

    由此可得:
    TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0.5;

    当截断点为0.8时:
    scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 0, 0, 1];

    正例与反例信息如下:

    正例 反例
    正例 TP=1 FN=1
    反例 FP=0 TN=2

    由此可得:
    TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0;

    4、根据TPR、FPR值,以FPR为横轴,TPR为纵轴画图。

    2. 利用ROC曲线评价模型性能——AUC(Area Under Curve)

    ​ AUC表示ROC曲线下的面积,主要用于衡量模型的泛化性能,即分类效果的好坏。AUC是衡量二分类模型优劣的一种评价指标,表示正例排在负例前面的概率。一般在分类模型中,预测结果都是以概率的形式表现,如果要计算准确率,通常都会手动设置一个阈值来将对应的概率转化成类别,这个阈值也就很大程度上影响了模型准确率的计算。

    之所以采用AUC来评价,主要还是考虑到ROC曲线本身并不能直观的说明一个分类器性能的好坏,而AUC值作为一个数量值,具有可比较性,可以进行定量的比较。

    AUC值的计算方法

    • 将坐标点按照横坐标FPR排序 。
    • 计算第ii个坐标点和第i+1i+1个坐标点的间距dxdx
    • 获取第ii或者i+1i+1个坐标点的纵坐标y。
    • 计算面积微元ds=ydxds=ydx
    • 对面积微元进行累加,得到AUC。

    AUC值对模型性能的判断标准

    1. AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
    2. 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
    3. AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
    4. AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

    3. 利用ROC曲线选择最佳模型

    首先了解一下ROC曲线图上很重要的四个点:

    1. 第一个点(0,1)(0,1),即FPR=0, TPR=1,这意味着FN(False Negative)=0,并且FP(False Positive)=0。意味着这是一个完美的分类器,它将所有的样本都正确分类。
    2. 第二个点(1,0)(1,0),即FPR=1,TPR=0,意味着这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。
    3. 第三个点(0,0)(0,0),即FPR=TPR=0,即FP(False Positive)=TP(True Positive)=0,可以发现该分类器预测所有的样本都为负样本(Negative)。
    4. 第四个点(1,1)(1,1),即FPR=TPR=1,分类器实际上预测所有的样本都为正样本。

    从上面给出的四个点可以发现,==ROC曲线图中,越靠近(0,1)的点对应的模型分类性能越好。==而且可以明确的一点是,ROC曲线图中的点对应的模型,它们的不同之处仅仅是在分类时选用的阈值(Threshold)不同,每个点所选用的阈值都对应某个样本被预测为正类的概率值。

    那么我们如何根据ROC曲线图定量的找到当前最优的分类模型呢?

    3.1 不同模型之间选择最优模型

    ​ 当然最直观的比较方式就是基于AUC值,不同的模型对应的ROC曲线中,AUC值大的模型性能自然相对较好。而当AUC值近似相等时,有两种情况:第一种是ROC曲线之间没有交点;第二种是ROC曲线之间存在交点。在两个模型AUC值相等时,并不代表两个模型的分类性能也相等。

    ROC曲线之间没有交点

    ​ 如下图所示,A,B,C三个模型对应的ROC曲线之间交点,且AUC值是不相等的,此时明显更靠近(0,1)(0,1)点的A模型的分类性能会更好。

    ROC曲线之间存在交点

    ​ 如下图所示,模型A、B对应的ROC曲线相交却AUC值相等,此时就需要具体问题具体分析:当需要高Sensitivity值时,A模型好过B;当需要高Specificity值时,B模型好过A。

    在这里插入图片描述

    3.2 同一模型中选择最优点对应的最优模型

    ​ 根据前面的内容,我们可以知道,在同一条ROC曲线上,越靠近(0,1)(0,1)的坐标点对应的模型性能越好,因为此时模型具有较高的真正率和较低的假正率。那么我们如何定量的从一条ROC曲线上找到这个最优的点呢?通常需要借助ISO精度线来找到这个最优的点

    ISO精度线(ISO Accuracy Lines)

    ​ ISO精度线实际上一类斜率确定而截距不确定的直线,设ISO精度线的方程为y=ax+by=ax+b,其中aa为直线的斜率,bb为直线的截距。

    a=NEGPOSa = \frac{NEG}{POS}

    ​ 其中,NEGNEG为数据集中负样本的数目,POSPOS为数据集中正样本的数目

    ​ 如下图所示,当a=0.5a=0.5时,图中的红线都可以作为ISO精度线

    在这里插入图片描述

    根据ISO精度线确定最优点

    ​ 因为ROC曲线上的点都是在同一模型下改变分类阈值得到的,所以在同一条ROC曲线上确定最优点的过程,其实就是确定最佳分类阈值的过程,这个阈值能够让模型在高真正率和低假正率之间取得最好的平衡,即模型的分类性能最好。

    根据ISO精度线确定最优点的步骤:

    1. 首先得到ISO精度线的斜率 a=NEGPOSa = \frac{NEG}{POS}

    2. 初始化截距b=0b=0,即此时的直线方程为y=axy=ax

    3. 逐渐增大截距,即把直线向左上角移动,直到直线与ROC曲线只有一个交点,则这个交点即为我们要找的最优点,这个最优点对应的分类阈值即为使得当前模型性能最优的分类阈值(本来刚开始考虑这个点应该是切点,不过后来想想应该不是,因为ROC图本身是不连续的,相邻节点间都是通过直线连接的)

    3.3 当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变

    ​ 之所以把ROC曲线的这个特性特意提出来讲,是因为我觉得这是ROC曲线和AUC这个评价标准最大的优势所在。其他的如正确率、精确率、召回率和F值都会受到样本分布的影响,即对于同一模型,采用这些指标进行性能评估的话,如果输入的样本中正负样本分布发生变化,则最终的正确率等参数也会变化,这种最终结果会被输入样本分布影响的特性,显然使得这些指标在评估某个样本性能时会对输入样本产生依赖,不能很客观的反应模型的性能(所以这也是为什么一个可信数据集非常重要的原因,因为数据集不仅影响对模型的训练,也会直接影响对模型性能的评估。基于这两点,我们就可以断言,对于同一个模型,更可信的数据集肯定能够取得更好的效果。)

    ​ 而对应于同一个模型,当其中的正负样本分布发生变化时,ROC曲线能够基本保持不变,这就保证至少在模型评估阶段,样本分布不会对这一过程产生太大的影响。

    ​ 那么如何理解这种不变性呢?网上找了很多博客都没有人解释过,我也只能简要的谈谈我的想法,日后如果看到了比较权威的解释再来补充吧。

    ​ 首先,ROC曲线每个点都是以某个阈值对应的TPR为纵坐标,以对应FPR为横坐标,所以不变性肯定是反映在样本分布改变时,ROC曲线图中的点随着阈值变化横纵坐标的变化保持一致。

    ​ 举个例子,当一个数据集中有PP个正样本和NN个负样本时,对应于某个阈值ThresholdThreshold,其TPRTPRFPRFPR计算公式如下:

    TPR=TPTP+FN,FPR=FPFP+TN TPR = \frac{TP}{TP+FN} ,FPR = \frac{FP}{FP+TN}

    ​ 当我们将负样本的数目增加十倍,即此时数据集中有PP个正样本和10N10*N个负样本,根据上面的计算公式可知,在负样本数量增加十倍之后,

    1. TPRTPR值的取值范围是不变,因为TP+FNTP+FN不变,同时TPTP的取值为[0,P][0,P]之间的整数,所以TPRTPR的离散取值区间在负样本增加的情况下是不变的。
    2. TPRTPR值不变的条件下,此时对应的ThresholdThreshold阈值基本不变(如果变化,则TPRTPR值不可能不变),其对应的FPRFPR值的取值范围也是不变的。根据样本独立同分布的假设,负样本数目改变,但负样本的预测概率分布是不变的,即当ThresholdThreshold不变时,FPFP值和FP+TNFP+TN值应该是等比例变化的,此时FPRFPR值不变。

    综上,我们可以从感性认识上证明当样本的分布发生变化时,ROC曲线能够基本保持不变。

    接下来给出一个实例,对比ROC曲线和PR(Precision-Recall)曲线在样本分布变化时的不同。下图中,(a)和(b)分别为从初始测试集中得到的ROC曲线和PR曲线,©和(d)分别为负样本增加十倍之后得到的ROC曲线和PR曲线。由图中可知,当样本分布变化时,ROC曲线基本没有变化,而PR曲线则变化很大,这充分说明了ROC曲线在模型性能评估上的优势。

    在这里插入图片描述

    ROC曲线在多分类问题上的推广

    ​ 经典的ROC曲线适用于对二分类问题进行模型评估,通常将它推广到多分类问题的方式有两种:

    1. 对于每种类别,分别计算其将所有样本点的预测概率作为阈值所得到的TPRTPRFPRFPR值(是这种类别为正,其他类别为负),最后将每个取定的阈值下,对应所有类别的TPRTPR值和FPRFPR值分别求平均,得到最终对应这个阈值的TPRTPRFPRFPR
    2. 首先,对于一个测试样本:1)标签只由0和1组成,1的位置表明了它的类别(可对应二分类问题中的‘’正’’),0就表示其他类别(‘’负‘’);2)要是分类器对该测试样本分类正确,则该样本标签中1对应的位置在概率矩阵P中的值是大于0对应的位置的概率值的。

    ​ 上面的两个方法得到的ROC曲线是不同的,当然曲线下的面积AUC也是不一样的。 在python中,方法1和方法2分别对应sklearn.metrics.roc_auc_score函数中参数average值为’macro’和’micro’的情况。

    展开全文
  • ROC曲线

    2017-12-11 16:10:30
    roc曲线

    最近在学习ROC, 来记录一下自己学的。

    1、

       ROC(Receiver Operating Characteristic Curve)曲线是利用classification的模型的真阳性率(tpr)和假阳性率(fpr)作为坐标轴,图形化的来表示分类方法准确率的高低。(一般以越靠近左上角即roc曲线下面的面积(AUC)越大越好)。

       首先考虑一个二分类的模型,其中被标记的结果为正(p)或负(n)。实际的正预测为正,表示为TP,实际的正预测为负,表示为FN,实际的负预测为正,表示为TP;实际的负预测为负,表示为TN。

      

      TPR=TP/TP+FN   即正样本的预测数 / 正样本的实际数,作为图形的Y轴

      FPR = FP/FP+TN  即 负样本被分为正样本的数目 / 负样本的实际数 ,作为图形的X轴


       ROC曲线点上的几个关键点:

    (0,0):每个实例都预测为负样本

    (1,1):每个实例都预测为正样本

    (1,0):理想模型,就是完全分类准确


     2、怎么去画ROC曲线

    (借助网上的一个实例来看  http://www.cnblogs.com/dlml/p/4403482.html)

    假设已经得到一系列样本被划分为正类的概率,按照大小的顺序去排。其中class值得是原先的类别,score指的是分为正类别的概率


    接着依次依靠score值作为阈值,当测试样本的正样本的概率大于或等于这个值时,就称为正样本。否则就称为负样本。每次选取一个阈值就得到一组(fpr,tpr),将其作为roc曲线上的一点。

       具体图形如下所示:

    AUC值:位于roc曲线下面的面积。介于0.1到1之间,AUC作为直观数据去评价分类器的好坏,值越大,分类器的性能越高。

    auc值是一个概率值,当你随机的挑选一个正样本或负样本,当前的分类算法根据score值将正样本排在负样本前面的概率就是AUC的值,AUC的值越大,当前分类算法越有可能将正样本放在负样本前面,从而能更好的去分类。

    3、为什么要提出ROC曲线和AUC的值

    ROC有个很好的特征就是在正负样本的分布变化时,roc的曲线能够保持不变。(在实际的数据集中经常出现正负样本比例不平衡),即正负样本的比例差距较大。在测试过程中的正负样本也可能随着时间变化,下面是precision-recall的曲线与ROC曲线:


       其中:(a)(c)为roc曲线(b)(d)为precision-recall曲线。

    (a)(b)表示的是在原始数据集上(正负样本平衡)的结果。(c)(d)表示的是将服测试数据集增加到原始的十倍之后的结果。发现roc曲线几乎没有变化,而precision-recall曲线变化较大。

    展开全文
  • roc曲线

    2019-10-14 14:01:56
    登录注册写文章首页下载APP机器学习基础(1)- ROC曲线理解蘑菇轰炸机关注赞赏支持机器学习基础(1)- ROC曲线理解22018.09.09 16:14:12字数 2776阅读 8325本文用于理解ROC曲线的定义,绘制过程及其应用实现。...

    机器学习基础(1)- ROC曲线理解

    蘑菇轰炸机关注赞赏支持

    机器学习基础(1)- ROC曲线理解

    2字数 2776阅读 8325

    本文用于理解ROC曲线的定义,绘制过程及其应用实现。

    基本目录如下:

    1. 什么是ROC曲线?
      1.1 ROC曲线的历史
      1.2 ROC曲线的定义
      1.3 ROC曲线的应用场景

    2. 如何绘制ROC曲线?
      2.1 ROC曲线的绘制原理
      2.2 ROC曲线绘制的Python实现

    ------------------第一菇 - 什么是ROC曲线------------------

    1.1 ROC曲线的历史

    自从读了吴军老师的《数学之美》,我就想明白了一件事情,如果想要讲明白一件事情,一定要把他的历史渊源都讲明白,这样我们才能对其理解透彻,而不是单纯学到会用就好~试想,有多少人在读这篇文章之前,会想到ROC曲线在军事上的运用呢?接下来,我就当一回搬运工,把ROC曲线的诞生渊源都捋一捋~

    经过一番网上调查,ROC曲线起源于第二次世界大战时期雷达兵对雷达的信号判断【1】。当时每一个雷达兵的任务就是去解析雷达的信号,但是当时的雷达技术还没有那么先进,存在很多噪声(比如一只大鸟飞过),所以每当有信号出现在雷达屏幕上,雷达兵就需要对其进行破译。有的雷达兵比较谨慎,凡是有信号过来,他都会倾向于解析成是敌军轰炸机,有的雷达兵又比较神经大条,会倾向于解析成是飞鸟。这个时候,雷达兵的上司就很头大了,他急需一套评估指标来帮助他汇总每一个雷达兵的预测信息,以及来评估这台雷达的可靠性(如果不论哪一类雷达兵都能准确预测,那这台雷达就很NB~读者可思考其缘由)。于是,最早的ROC曲线分析方法就诞生了,用来作为评估雷达可靠性的指标~在那之后,ROC曲线就被广泛运用于医学以及机器学习领域~

    1.2 ROC曲线的定义

    ROC的全称是Receiver Operating Characteristic Curve,中文名字叫“受试者工作特征曲线”,顾名思义,其主要的分析方法就是画这条特征曲线。这里在网上找了一个比较好的图样示例如下,

    ROC曲线示例

    该曲线的横坐标为假阳性率(False Positive Rate, FPR),N是真实负样本的个数,
    FP是N个负样本中被分类器预测为正样本的个数。

    纵坐标为真阳性率(True Positive Rate, TPR),
    TPR=\frac{TP}{P}P是真实正样本的个数,
    TP是P个正样本中被分类器预测为正样本的个数。

    举一个简单的例子方便大家的理解,还是刚才雷达的例子。假设现在有10个雷达信号警报,其中8个是真的轰炸机(P)来了,2个是大鸟(N)飞过,经过某分析员解析雷达的信号,判断出9个信号是轰炸机,剩下1个是大鸟,其中被判定为轰炸机的信号中,有1个其实是大鸟的信号(FP=1),而剩下8个确实是轰炸机信号(TP=8)。因此可以计算出FPR为0.5,TPR为1,而(0.5,1)就对应ROC曲线上一点。

    说到这里,想必大家已经明白这俩个指标的计算方法,再往深挖一点,可以思考一下这俩个指标背后的原理。还是雷达的例子,敏锐的雷达系统我们肯定希望它能把所有的敌方轰炸机来袭都感知到并预测出来,即TPR越高越好,但我们又不希望它把大鸟的飞过也当成轰炸机来预警,即FRP越低越好。因此,大家可以发现,这俩个坐标值其实是有相互制约的一个概念在里面。

    当绘制完成曲线后,就会对模型有一个定性的分析,如果要对模型进行量化的分析,此时需要引入一个新的概念,就是AUC(Area under roc Curve)面积,这个概念其实很简单,就是指ROC曲线下的面积大小,而计算AUC值只需要沿着ROC横轴做积分就可以了。真实场景中ROC曲线一般都会在y=x这条直线的上方,所以AUC的取值一般在0.5~1之间。AUC的值越大,说明该模型的性能越好。

    1.3 ROC曲线的应用场景

    ROC曲线的应用场景有很多,根据上述的定义,其最直观的应用就是能反映模型在选取不同阈值的时候其敏感性(sensitivity, FPR)和其精确性(specificity, TPR)的趋势走向【2】。不过,相比于其他的P-R曲线(精确度和召回率),ROC曲线有一个巨大的优势就是,当正负样本的分布发生变化时,其形状能够基本保持不变,而P-R曲线的形状一般会发生剧烈的变化,因此该评估指标能降低不同测试集带来的干扰,更加客观的衡量模型本身的性能。要解释清楚这个问题的话,大家还是先回顾一下混淆矩阵。

    混淆矩阵

    其中,精确率P的计算公式为,

    召回率R的计算公式为,

    此时,若将负样本的数量增加,扩大个10倍,可以预见FP,TN都会增加,必然会影响到P,R。但ROC曲线的俩个值,FPR只考虑第二行,N若增大10倍,则FP,TN也会成比例增加,并不影响其值,TPR更是只考虑第一行,不会受到影响。这里在网上盗个图【3】,方便大家理解哈~

    ROC曲线和P-R曲线对比图

    其中第一行ab均为原数据的图,左边为ROC曲线,右边为P-R曲线。第二行cd为负样本增大10倍后俩个曲线的图。可以看出,ROC曲线基本没有变化,但P-R曲线确剧烈震荡。因此,在面对正负样本数量不均衡的场景下,ROC曲线(AUC的值)会是一个更加稳定能反映模型好坏的指标。

    ------------------第二菇 - 如何绘制ROC曲线------------------

    2.1 ROC曲线的绘制原理

    如果大家对二值分类模型熟悉的话,都会知道其输出一般都是预测样本为正例的概率,而事实上,ROC曲线正是通过不断移动分类器的“阈值”来生成曲线上的一组关键点的。可能这样讲有点抽象,还是举刚才雷达兵的例子。每一个雷达兵用的都是同一台雷达返回的结果,但是每一个雷达兵内心对其属于敌军轰炸机的判断是不一样的,可能1号兵解析后认为结果大于0.9,就是轰炸机,2号兵解析后认为结果大于0.85,就是轰炸机,依次类推,每一个雷达兵内心都有自己的一个判断标准(也即对应分类器的不同“阈值”),这样针对每一个雷达兵,都能计算出一个ROC曲线上的关键点(一组FPR,TPR值),把大家的点连起来,也就是最早的ROC曲线了。

    为方便大家进一步理解,本菇也在网上找到了一个示例跟大家一起分享【4】。下图是一个二分模型真实的输出结果,一共有20个样本,输出的概率就是模型判定其为正例的概率,第二列是样本的真实标签。


    二值分类模型输出结果示例

    现在我们指定一个阈值为0.9,那么只有第一个样本(0.9)会被归类为正例,而其他所有样本都会被归为负例,因此,对于0.9这个阈值,我们可以计算出FPR为0,TPR为0.1(因为总共10个正样本,预测正确的个数为1),那么我们就知道曲线上必有一个点为(0, 0.1)。依次选择不同的阈值(或称为“截断点”),画出全部的关键点以后,再连接关键点即可最终得到ROC曲线如下图所示。

    ROC曲线示例图

    其实还有一种更直观的绘制ROC曲线的方法,这边简单提一下。就是把横轴的刻度间隔设为\frac{1}{N},纵轴的刻度间隔设为\frac{1}{P},N,P分别为负样本与正样本数量。然后再根据模型的输出结果降序排列,依次遍历样本,从0开始绘制ROC曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,遍历完所有样本点以后,曲线也就绘制完成了。究其根本,其最大的好处便是不需要再去指定阈值寻求关键点了,每一个样本的输出概率都算是一个阈值了。当然,无论是工业界还是学术界的实现,都不可能手动去绘制,下面就来讲一下如何用Python高效绘制ROC曲线。

    2.2 ROC曲线绘制的Python实现

    熟悉sklearn的读者肯定都知道,几乎所有评估模型的指标都来自sklearn库下面的metrics,包括计算召回率,精确率等。ROC曲线的绘制也不例外,都得先计算出评估的指标,也就是从metrics里面去调用roc_curve, auc,然后再去绘制。

    from sklearn.metrics import roc_curve, auc
    

    roc_curve和auc的官方说明教程示例如下【5】。

    # 数据准备
    >>> import numpy as np
    >>> from sklearn import metrics
    >>> y = np.array([1, 1, 2, 2])
    >>> scores = np.array([0.1, 0.4, 0.35, 0.8])
    

    # roc_curve的输入为
    # y: 样本标签
    # scores: 模型对样本属于正例的概率输出
    # pos_label: 标记为正例的标签,本例中标记为2的即为正例
    >>> fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
    # 假阳性率
    >>> fpr
    array([ 0. , 0.5, 0.5, 1. ])
    # 真阳性率
    >>> tpr
    array([ 0.5, 0.5, 1. , 1. ])
    # 阈值
    >>> thresholds
    array([ 0.8 , 0.4 , 0.35, 0.1 ])

    # auc的输入为很简单,就是fpr, tpr值
    >>> auc = metrics.auc(fpr, tpr)
    >>> auc
    0.75

    因此调用完roc_curve以后,我们就齐全了绘制ROC曲线的数据。接下来的事情就很简单了,调用plt即可,还是用官方的代码示例一步到底。

    import matplotlib.pyplot as plt
    plt.figure()
    lw = 2
    plt.plot(fpr, tpr, color='darkorange',
             lw=lw, label='ROC curve (area = %0.2f)' % auc)
    plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Receiver operating characteristic example')
    plt.legend(loc="lower right")
    plt.show()
    

    最终生成的ROC曲线结果如下图。


    ROC曲线结果

    至此,整一套ROC曲线的绘制就说明白了。

    简单总结一下本文,先是讲述了ROC曲线的历史渊源,引导读者理解ROC曲线的各个基本概念,又与P-R曲线做了详细的对比,让读者理解其应用场景,最后接地气的轻微解读了一番其绘制过程,并附上了代码实现。希望大家读完本文后对ROC曲线会有一个全新的认识。有说的不对的地方也请大家指出,多多交流,大家一起进步~?

    参考文献:
    【1】https://www.ncbi.nlm.nih.gov/books/NBK22319/
    【2】https://stats.stackexchange.com/questions/28745/advantages-of-roc-curves
    【3】https://blog.csdn.net/songyunli1111/article/details/82285266
    【4】https://www.zhihu.com/question/22844912/answer/246037337
    【5】http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve

    拥有21钻 (约2.37元)
    关注
    "小礼物走一走,来简书关注我"
          共4人赞赏
    赞赏

    全部评论8只看作者
    按时间倒序
    按时间正序

    8楼
    地雷的例子是怎么算的啊!一共10个信号,实际上是8个地雷2个鸟,小兵判断是9个地雷1个鸟,那TPR=TP/P=8/9啊,FPR=FP/P=1/9啊!为什么FPR=0.5,TPR=1呢
    回复
    仔细读一下每个符号代表的意思,TP是正确预测的正样本的个数8,P是正样本总数,
    FP是被错误预测为正样本的个数1,N是负样本的总数2 FPR=FP/N 希望能够帮到你 加油
    回复
    添加新评论
    7楼
    谢谢
    回复
    6楼
    感谢,比书里清晰多了
    回复
    5楼
    给一个小小的赞,很清晰的讲解
    回复
    4楼
    讲的很赞 我之前也用r写过如何实现经验roc https://www.jianshu.com/p/703d16ce23ea
    回复
    3楼
    最近刚好想了解一下,看到这篇文章解开了我的很多困惑,?
    回复
    2楼
    精辟??
    回复

    被以下专题收入,发现更多相似内容

    推荐阅读更多精彩内容

    评论8
    58
    5859
    4赞赏
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,781
精华内容 1,512
关键字:

roc曲线