roc_rocketmq - CSDN
精华内容
参与话题
  • ROC曲线的理解

    千次阅读 2019-10-21 10:41:35
    1 ROC曲线的概念 受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为 感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一 信号...

    1 ROC曲线的概念

    受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为 感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一 信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以假阳性概率(False positive rate)为 横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线。

    ROC 曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。传统的诊断试验评价方 法有一个共同的特点,必须将试验结果分为两类,再进行统计分析。ROC曲线的评价方法与传统的评价方法不同,无须此限制,而是根据实际情况,允许有中间状 态,可以把试验结果划分为多个有序分类,如正常、大致正常、可疑、大致异常和异常五个等级再进行统计分析。因此,ROC曲线评价方法适用的范围更为广泛。

    2 ROC曲线的例子

    考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也 被 预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false negative)。

    FN:漏报,没有正确找到的匹配的数目;

    TN:正确拒绝的非匹配对数

    展开全文
  • 关于ROC与AUC最通俗的解释

    万次阅读 2018-07-06 16:12:03
    转自:https://www.zybuluo.com/frank-shaw/note/152851前言本文内容大部分来自于如下两个博客: http://blog.csdn.net/dinosoft/article/details/43114935 http://my.oschina.net/liangtee/blog/340317引子假设有...

    转自:https://www.zybuluo.com/frank-shaw/note/152851


    前言

    本文内容大部分来自于如下两个博客: 
    http://blog.csdn.net/dinosoft/article/details/43114935 
    http://my.oschina.net/liangtee/blog/340317

    引子

    假设有下面两个分类器,哪个好?(样本中有A类样本90个,B 类样本10个。)

    A类样本B类样本分类精度
    分类器C1A*90(100%)A*10(0%)90%
    分类器C2A*70 + B*20 (78%)A*5 + B*5 (50%)75%

    分类器C1把所有的测试样本都分成了A类,分类器C2把A类的90个样本分对了70个,B类的10个样本分对了5个。

    则C1的分类精度为 90%,C2的分类精度为75%,但直觉上,我们感觉C2更有用些。但是依照正确率来衡量的话,那么肯定C1的效果好一点。那么这和我们认为的是不一致的。也就是说,有些时候,仅仅依靠正确率是不妥当的。

    我们还需要一个评价指标,能客观反映对正样本、负样本综合预测的能力,还要考虑消除样本倾斜的影响(其实就是归一化之类的思想,实际中很重要,比如pv总是远远大于click),这就是auc指标能解决的问题。

    ROC

    为了理解auc,我们需要先来弄懂ROC。 
    先来看一个普遍的二分类问题的结果,预测值和实际值有4种组合情况,看下面的表格: 
    ROC定义导出 
    我们定义一个变量: 


    看图也就可以知道,TPR表示的就是预测正确且实际分类为正的数量 与 所有正样本的数量的比例。--实际的正样本中,正确预测的比例是多少?

    FPR表示的是预测错误且实际分类为负的数量 与所有负样本数量的比例。 --实际的负样本当中,错误预测的比例是多少?

    可以代入到上面的两个分类器当中,可以得到下面的表格(分类器C1):

    预测A预测B合计
    实际A90090
    实际B10010

    TPR = FPR = 1.0.

    分类器C2:

    预测A预测B合计
    实际A702090
    实际B5510

    TPR = 0.78, FPR = 0.5

    那么,以TPR为纵坐标,FPR为横坐标画图,可以得到: 
    ROC画图 
    上图中蓝色表示C1分类器,绿色表示C2分类器。可以知道,这个时候绿色的点比较靠近左上角,可以看做是分类效果较好。所以评估标准改为离左上角近的是好的分类器(考虑了正负样本的综合分类能力)。

    一连串这样的点构成了一条曲线,该曲线就是ROC曲线。而ROC曲线下的面积就是AUC(Area under the curve of ROC)。这就是AUC指标的由来。

    如何画ROC曲线

    对于一个特定的分类器和测试数据集,显然只能得到一个分类结果,即一组FPR和TPR结果,而要得到一个曲线,我们实际上需要一系列FPR和TPR的值才能得到这样的曲线,这又是如何得到的呢?

    可以通过分类器的一个重要功能“概率输出”,即表示分类器认为某个样本具有多大的概率属于正样本(或负样本),来动态调整一个样本是否属于正负样本(还记得当时阿里比赛的时候有一个表示被判定为正样本的概率的列么?)

    假如我们已经得到了所有样本的概率输出(属于正样本的概率),现在的问题是如何改变这个阈值(概率输出)?我们根据每个测试样本属于正样本的概率值从大到小排序。下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。 
    ROC画图 
    接下来,我们从高到低,依次将“Score”值作为阈值,当测试样本属于正样本的概率大于或等于这个阈值时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的阈值,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图: 
    ROC画图 
    当我们将阈值设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当阈值取值越多,ROC曲线越平滑。

    --在阿里比赛的时候还以为ROC是没用的!!!!真的是有眼无珠啊!!!还是有疑惑的是:如何根据ROC来判定结果的好换呢?看哪个分类器更加接近左上角吧。同时,可以根据ROC来确定划定正样本的概率边界选择在哪里比较合适!!!原来是这样!!!!!!!!!

    为什么使用ROC

    既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比: 

    在上图中,(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。

    展开全文
  • AUC,ROC我看到的最透彻的讲解

    万次阅读 多人点赞 2018-05-20 21:42:32
    所以根据定义:我们最直观的有两种计算AUC的方法1:绘制ROC曲线,ROC曲线下面的面积就是AUC的值2:假设总共有(m+n)个样本,其中正样本m个,负样本n个,总共有m*n个样本对,计数,正样本预测为正样本的概率值大于负...

    面试的时候,一句话说明AUC的本质和计算规则:

    AUC:一个正例,一个负例,预测为正的概率值比预测为负的概率值还要大的可能性。

    所以根据定义:我们最直观的有两种计算AUC的方法

    1:绘制ROC曲线,ROC曲线下面的面积就是AUC的值

    2:假设总共有(m+n)个样本,其中正样本m个,负样本n个,总共有m*n个样本对,计数,正样本预测为正样本的概率值大于负样本预测为正样本的概率值记为1,累加计数,然后除以(m*n)就是AUC的值

    PS:百度百科,随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。这里的score值就是预测为正的概率的值,排在前面表示的是正样本的预测为正的概率值大于负样本的预测为正的概率值

    一、roc曲线

    1、roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。

    横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例占所有负例的比例;(1-Specificity)

    纵轴:真正类率(true postive rate TPR)灵敏度,Sensitivity(正类覆盖率)

    2针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况.

    (1)若一个实例是正类并且被预测为正类,即为真正类(True Postive TP)

    (2)若一个实例是正类,但是被预测成为负类,即为假负类(False Negative FN)

    (3)若一个实例是负类,但是被预测成为正类,即为假正类(False Postive FP)

    (4)若一个实例是负类,但是被预测成为负类,即为真负类(True Negative TN)

    TP:正确的肯定数目

    FN:漏报,没有找到正确匹配的数目

    FP:误报,没有的匹配不正确

    TN:正确拒绝的非匹配数目

    列联表如下,1代表正类,0代表负类:

    由上表可得出横,纵轴的计算公式:

    (1)真正类率(True Postive Rate)TPR: TP/(TP+FN),代表分类器预测的正类中实际正实例占所有正实例的比例。Sensitivity

    (2)负正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器预测的正类中实际负实例占所有负实例的比例。1-Specificity

    (3)真负类率(True Negative Rate)TNR: TN/(FP+TN),代表分类器预测的负类中实际负实例占所有负实例的比例,TNR=1-FPR。Specificity

    假设采用逻辑回归分类器,其给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6,概率大于等于0.6的为正类,小于0.6的为负类。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

    如下面这幅图,(a)图中实线为ROC曲线,线上每个点对应一个阈值。

     

    横轴FPR:1-TNR,1-Specificity,FPR越大,预测正类中实际负类越多。

    纵轴TPR:Sensitivity(正类覆盖率),TPR越大,预测正类中实际正类越多。

    理想目标:TPR=1,FPR=0,即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好。

    二 如何画roc曲线

    假设已经得出一系列样本被划分为正类的概率,然后按照大小排序,下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。

     

    接下来,我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图:

      

    AUC(Area under Curve):Roc曲线下的面积,介于0.1和1之间。Auc作为数值可以直观的评价分类器的好坏,值越大越好。

    首先AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。

    二、AUC计算  

     1.  最直观的,根据AUC这个名称,我们知道,计算出ROC曲线下面的面积,就是AUC的值。事实上,这也是在早期 Machine Learning文献中常见的AUC计算方法。由于我们的测试样本是有限的。我们得到的AUC曲线必然是一个阶梯状的。因此,计算的AUC也就是这些阶梯 下面的面积之和。这样,我们先把score排序(假设score越大,此样本属于正类的概率越大),然后一边扫描就可以得到我们想要的AUC。但是,这么 做有个缺点,就是当多个测试样本的score相等的时候,我们调整一下阈值,得到的不是曲线一个阶梯往上或者往右的延展,而是斜着向上形成一个梯形。此 时,我们就需要计算这个梯形的面积。由此,我们可以看到,用这种方法计算AUC实际上是比较麻烦的。 

       2. 一个关于AUC的很有趣的性质是,它和Wilcoxon-Mann-Witney Test是等价的。这个等价关系的证明留在下篇帖子中给出。而Wilcoxon-Mann-Witney Test就是测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score。有了这个定义,我们就得到了另外一中计 算AUC的办法:得到这个概率。我们知道,在有限样本中我们常用的得到概率的办法就是通过频率来估计之。这种估计随着样本规模的扩大而逐渐逼近真实值。这 和上面的方法中,样本数越多,计算的AUC越准确类似,也和计算积分的时候,小区间划分的越细,计算的越准确是同样的道理。具体来说就是统计一下所有的 M×N(M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少个组中的正样本的score大于负样本的score。当二元组中正负样本的 score相等的时候,按照0.5计算。然后除以MN。实现这个方法的复杂度为O(n^2)。n为样本数(即n=M+N) 
       3.  第三种方法实际上和上述第二种方法是一样的,但是复杂度减小了。它也是首先对score从大到小排序,然后令最大score对应的sample 的rank为n,第二大score对应sample的rank为n-1,以此类推。然后把所有的正类样本的rank相加,再减去M-1种两个正样本组合的情况。得到的就是所有的样本中有多少对正类样本的score大于负类样本的score。然后再除以M×N。即 

     

          公式解释:

            1、为了求的组合中正样本的score值大于负样本,如果所有的正样本score值都是大于负样本的,那么第一位与任意的进行组合score值都要大,我们取它的rank值为n,但是n-1中有M-1是正样例和正样例的组合这种是不在统计范围内的(为计算方便我们取n组,相应的不符合的有M个),所以要减掉,那么同理排在第二位的n-1,会有M-1个是不满足的,依次类推,故得到后面的公式M*(M+1)/2,我们可以验证在正样本score都大于负样本的假设下,AUC的值为1

          2、根据上面的解释,不难得出,rank的值代表的是能够产生score前大后小的这样的组合数,但是这里包含了(正,正)的情况,所以要减去这样的组(即排在它后面正例的个数),即可得到上面的公式

          另外,特别需要注意的是,再存在score相等的情况时,对相等score的样本,需要 赋予相同的rank(无论这个相等的score是出现在同类样本还是不同类的样本之间,都需要这样处理)。具体操作就是再把所有这些score相等的样本 的rank取平均。然后再使用上述公式。 

    参考:

    http://blog.csdn.net/abcjennifer/article/details/7359370

    展开全文
  • ROC及AUC计算方法及原理

    万次阅读 多人点赞 2020-07-11 15:25:13
    1.非均衡分类问题 在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的。例如在垃圾邮件过滤中,我们希望重要的邮件永远不要被误判为垃圾邮件,还有在癌症检测中,宁愿误判...

    1.非均衡分类问题

    在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的。例如在垃圾邮件过滤中,我们希望重要的邮件永远不要被误判为垃圾邮件,还有在癌症检测中,宁愿误判也不漏判。在这种情况下,仅仅使用分类错误率来度量是不充分的,这样的度量错误掩盖了样本如何被错分的事实。所以,在分类中,当某个类别的重要性高于其他类别时,可以使用Precison和Recall多个比分类错误率更好的新指标。

    Precison(查准率):预测为正例的样本中真正正例的比例。

    Recall(召回率):真正为正例的样本有多少被预测出来。

    可见,我们可以根据我们最终的目标来选择度量指标。例如,在癌症检测中,我们希望选择Recall较高的模型(有病为正例)。而在垃圾邮件过滤中,我们希望选择Precison较高的模型。但是我们很容易构造一个高查准率或高召回率的分类器,但是很难保证两者同时成立。构建一个同时使两者很大的分类器是具有挑战性的。

    2.ROC曲线

    ROC是一个用于度量分类中的非均衡性的工具,ROC曲线及AUC常被用来评价一个二值分类器的优劣。

    既然已经有了这么多的评价指标,为什么还要使用ROC与AUC呢?

    因为ROC曲线有一个很好的特征:在实际的数据集中经常会出现类别不平衡现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间而变化。而在这种情况下,ROC曲线能够保持不变。下图是ROC曲线和Precison-Recall曲线的对比:

    在上图中,a和c为ROC曲线,b和d为Precison和Recall曲线。a和b展示的是在原始测试集(正负样本平衡)的结果,c和d是将测试集中负样本的数量变为原来的10倍后分类器的结果。可以看出,曲线基本保持不变,而Precison和Recall变化较大。

    2.2 ROC曲线的定义(Receiver Operating Characteristic)

    ROC可以用来比较不同分类器的相关性能。

    如图是一个ROC曲线的实例:

    其中横坐标为FPR(False positive rate 假阳率),纵坐标为真阳率TPR(True postive rate)。

    FPR:所有负例中有多少被预测为正例; TPR:有多少真正的正例被预测出来;

    ROC 描绘了两者的相对权衡:

    • benefits(true postives)
    • costs(false positives)

    下图给出了Precison,Recall, FPR,TPR的定义:

      predicted Postive predicted Negative
    real Postive TP FN
    real Negative FP TN

        预测为正例的样本中有多少真正的正例

              所有的正例中有多少被预测出来

                所有的负样本中有多少被预测为正例

                等同于recall

    F-measure: precison和recall的调和平均值。没有一个单个的度量可以告诉所有的信息,所以建议使用多个度量。

    接下来我们考虑ROC曲线中的四个点和一条线。

    1.(0,0):fp=tp=0 ,即所有样本都被预测为负样本;

    2.(1,1):fp=tp=1,所有样本都被预测为正样本;

    3.(1,0):fp=1,tp=0,所有正例都被预测为负例,而所有正例都没被预测出来,这时最糟糕的分类器,因为它成功的避开了所有正确答案。

    4.(0,1):fp=0,tp=1,这是一个完美的分类器,它将所有样本都正确分类。

    所以经过上述分析,我们可以断言,ROC曲线越接近左上角,该分类器的性能越好,意味着分类器在假阳率很低的同时获得了很高的真阳率。

    5.   虚线y=x:这条对角线熵的点其实代表的是一个采用随机猜测策略的分类器的结果。例如(0.5,0.5),表示对于一半的样本猜测其为正样本,另外一半样本为负样本。出现在右下角三角形中的任何分类器都比随机猜测更糟糕。因此,在ROC图中,此三角形通常为空。

    3.AUC的含义

    AUC(Area Under Curve) 被定义为ROC曲线下的面积,因为ROC曲线一般都处于y=x这条直线的上方,所以取值范围在0.5和1之间,使用AUC作为评价指标是因为ROC曲线在很多时候并不能清晰地说明哪个分类器的效果更好,而AUC作为一个数值,其值越大代表分类器效果更好。

    AUC意味着什么?

    The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.

    首先AUC是一个概率值,当随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的分数将这个正样本排在负样本前面的概率就是AUC值。所以,AUC的值越大,当前的分类算法越有可能将正样本排在负样本值前面,既能够更好的分类。

    4. ROC曲线的绘制

    我们可以看出,对于一个特定的分类器和测试数据集,显然只能得到一个分类结果,即一组FPR和TPR的结果,那么是如何得到整个ROC曲线的呢?

    要想得到ROC曲线,我们就需要一组FPR和TPR的值。我们先来看Wikipedia上面对ROC曲线的定义:

    “In signal detection theory, a receiver oprating characteristic(ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.”

    ROC曲线代表的是当“discriminative threshold“变化时分类器的性能、如何理解这里的“discriminative threshold”呢?

    它代表的是分类器以多大的置信度将样本分类为正样本。分类器的一个重要功能”概率输出“,即表示分类器认为某个样本具有多大的概率属于正样本(或负样本)。通过深入地了解各个分类器的内部机理,我们总能想办法得到一种概率输出。通常来说,是将一个实数范围通过某个变化映射到(0,1)区间。

    假设我们已经得到了所有样本的概率输出(即属于正样本的概率),那么我们就可以通过改变”discrimination threshold“来绘制ROC曲线。

    (许多分类器,例如决策树或者规则集合,被设计产生一个类别决策,即将每个样本预测为Y或N。当使用这样的离散分类器时,产生一个单个额confusion矩阵,对应于一个ROC点。而一些分类器,例如Naive Bayes,产生一个样本概率值,这样一个ranking/scoring分类器可以使用一个threshold来产生一个discrete(binary)分类器:如果分类器输出的概率大于threshold,分类器产生Y,否则产生N。每个不同的threshold值在ROC空间产生一个不同的点(对应于一个不同的confusion matrix)。)

    具体过程如下所述:

    1.如图,我们根据每个测试样本属于正样本的概率值score从大到小排序。(图中class一栏代表每个测试样本的真正标签(p代表正样本,n代表负样本))

    2.接着,我们从高到低,依次将score作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。

    例如:对于第四个样本,其score值为0.6,那么score值大于等于0.6的样本1,2,3,4都被认为是正样本,而其他样本则被认为是负样本。

    3.每次选取不同的score作为threshold,我们就可以得到一组FPR和TPR,即曲线上的一点。将这些(FPR,TPR)对连接起来,就可以得到完整的ROC曲线如下图。(当threshold取值越多,ROC曲线就越平滑)。

    当我们将threshold设置为1和0时,即分别对应将所有样本划分为负样本和将所有样本划分为正样本,就可以的得到曲线上的(0,0)和(1,1)两点。

    关于score值:分类器都会提供每个样例被判为阳性或者阴性的可信程度值,大多数分类器都能够做到这一点,但是在通常情况下,这些值会在最后输出离散分类标签之前被清除。例如,朴素贝叶斯能够提供一个可能值,在Logistic回归中输入到sigmoid函数中的是一个数值。在Adaboost和SVM中,都会计算一个数值然后输入到sign()函数中,所有的这些值都可以看做score,用于衡量给定分类器的预测强度。

     ROC点(0.1,0.5)产生了最高的准确率。注意到分类器的最好的准确率出现在threshold=0.54时,而不是我们认为的在类别平衡分布的threshold等于0.5处。

    4.1 Convex Hull

     

     

    阴影区域被称作两个曲线的convex hull。在选择分类器时总是应该根据convex hull的上边界进行操作。例如,如果你的目标只是覆盖40%的真阳性,你应该选择方法A,这样可以提供5%的更低的假阳性率相对于B来说。如果你的目标是覆盖80%的真阳性,你应该选择方法B,因为B的假阳性率为60%,与A相比更低。如果你的目标是覆盖60%的真阳性,那么你应该结合A和B。

    5. 准确性的不足(代价敏感学习

    在金融检测中,如果将欺诈用户误判为优质客户,这样会给企业带来巨大损失。同样把病人误判为健康的人,会给病人带来生命威胁,这些问题都是代价敏感分类问题。即将样本误分类为正样本和将样本误分类为负样本的代价是不同的。然而,许多传统的分类算法假定分类代价都是相等的,分类的时候一般就考虑怎么使得分类模型的准确率更高,这样就可能忽视掉分类代价的问题。但是往往分类代价相比分类准确率具有更加重要的意义。正如上面的例子,欺诈用户和有病的人一般是小类别样本,将它们进行正确分类更为重要,如果将它们误分类将会产生严重的后果,我们的目标就是检查出这些异常。

    传统的分类算法不适合解决代价敏感的问题,这就需要研究能够解决代价敏感问题的分类方法,所以可以在传统分类方法中引入代价因子,运用代价敏感学习减少分类代价。成本矩阵Cost(i,j)表示将i类样本误分类为类j的代价。代价敏感分类就是为不同类型的错误分类不同的代价,使得分类时,高代价错误产生的数量和错误分类的代价总和最小。

    基于损失的分类:

    对于每个样本E,分类器计算p(y|E) 和 p(n|E)=1-p(y|E),分类器将样本分类为正例当:

    p(y|E)>\frac{p(n|E)*c(Y,n)}{c(N,y)}

    MetaCost(代价敏感学习):MetaCost是一种典型的集成学习算法,其核心思想是计算出每个训练样本额预测分类概率,再根据最优分类期望代价重标记原训练样本的类标号,得到新的训练集,然后在新的训练集上重新运行目标分类算法进行训练,从而实现代价敏感分类。

     

    6. ROC曲线的python代码实现

    def plotROC(predStrengths, classLabels):
        cur=(0.0, 0.0)
        numPosClass = np.sum(np.array(classLabels) == 1.0)
        yStep = 1.0/numPosClass
        xStep = 1.0/(len(classLabels)-numPosClass)
        print(np.array(predStrengths.flatten()))
        sortedIndicies = np.argsort(-np.array(predStrengths.flatten()))
        print(sortedIndicies)
        fig = plt.figure()
        fig.clf()
        ySum = 0.0
        ax = plt.subplot(111)
        for index in sortedIndicies:
            if classLabels[index] == 1.0:
                delY = yStep; delX=0
            else:
                delY = 0; delX = xStep
                ySum += cur[1]
            ax.plot([cur[0], cur[0]+delX], [cur[1], cur[1]+delY], c='b')
            cur = (cur[0]+delX, cur[1]+delY)
            print(cur)
        ax.plot([0, 1], [0, 1], 'b--')
        ax.axis([0, 1, 0, 1])
        plt.xlabel('False Positve Rate')
        plt.ylabel('True Postive Rate')
        plt.title('ROC curve for AdaBoost Horse Colic Detection System')
        ax.axis([0, 1, 0, 1])
        plt.show()
        print('the Area under the curve is:', ySum*xStep)

    代码解释:

    上述程序中的函数有两个输入参数,第一个参数就代表的是score,代表的是分类器的预测强度。第二个参数是classLabels,即样本真实的类标签。首先创建一个浮点数二元组cur,将它初始化为(0.0,0.0),代表从坐标点(0.0,0.0)开始绘制ROC曲线。接着通过数组过滤的方式计算正例的数目,并将该值赋给numPosClas,该值确定了在y坐标轴上的步进数目。(因为y轴的含义是有多少正例被预测出来,所以它的长度为正例的数目),相应的,也可以得到x轴的步长。

    接下来,我们将score从大到小排序得到排序索引,因为threshold是从大到小设置。所以最开始threshold为1.0,即所有样本都被预测为负例,因此是从点(0,0)开始绘制。当在循环中遍历坐标点时,每当得到一个类别为1的样本,那么就要沿着y轴增加一个步长,即增加真阳率。对于类别为0的样本,则沿着x轴增加一个步长,增加假阳率。一旦确定了是在哪个轴的方向熵进行移动的,就可以在当前点和新点之间画出一条线段,再更新坐标点cur。

    (例如,对与样本点1,当前threshold为0.9,即score大于等于0.9的样本为正,小于为负,那么样本点1就被预测为正,而该样本的真实标签也为正,所以真阳率+1。同理,当遍历到样本3时,threshold设为0.7,此时样本3被预测为正例,但是该样本其实为负例,所以假阳率+1,代表又一个负样本被误判为正例。)

    为了计算,我们需要对多个小矩形的面积进行累加。这些小矩形的宽度是xStep,因此我们可以对所有矩形的高度进行累加,所有高度的和随着x轴的每次移动而依次增加,然后再乘以xStep得到总面积。

    运行结果:

     

     

     

    展开全文
  • 分类模型评估之ROC-AUC曲线和PRC曲线

    万次阅读 多人点赞 2020-02-10 12:20:17
    ROC曲线和AUC ROC(Receiver Operating Characteristic,接受者工作特征曲线)曲线和AUC常被用来评价一个二值分类器(binary classifier...博文介绍ROC和AUC的特点,讨论如何作出ROC曲线图以及计算AUC。 AUC是现...
  • ROC的意义

    千次阅读 2018-05-28 17:45:58
    既然有了ACC为什么要有ROC呢(既生瑜何生亮呢) 我们知道,我们常用ACC准确率来判断分类器分类结果的好坏,既然有了ACC为什么还需要ROC呢,很重要的一个因素是实际的样本数据集中经常会出现数据偏斜的情况,要么负类...
  • ROC曲线理解

    千次阅读 2018-05-15 21:20:41
    ROC(receiver operator characteristic curve, ROC)曲线:即受试者工作特征曲线,是反映敏感度和特异度连续变量的综合指标,用作图法展示两度之间的关系。作图方法:在相关临床研究报告中,若有一个ROC曲线图,将...
  • 对于分类器,或者说分类算法,评价指标主要有precision,recall,F-score1,以及即将要讨论的ROC和AUC。本文通过对这些指标的原理做一个简单的介绍,然后用python分别实现二分类和多分类的ROC曲线。 1 基本概念...
  • 多分类ROC曲线

    万次阅读 2019-02-14 11:50:27
    转自 ...1 基本概念 一个分类模型(分类器)是一个将某个实例映射到一个特定类的过程.分类器的结果可以是给出该实例所属的类别,也可以给定该实例属于某个类别的概率。 首先来考虑一个两类预测问题(双分类器),其结果要么...
  • ROC曲线详解

    万次阅读 2018-04-26 13:33:49
    —————————————————————————————————分割线1 ROC曲线的概念受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为 感受性曲线(sensitivity curve...
  • ROC曲线的最佳阈值如何选取

    万次阅读 2015-01-15 22:44:43
    ROC曲线的最佳阈值如何选取
  • R语言绘制ROC曲线如何画在一个图中

    万次阅读 2017-12-16 14:09:01
    library(“pROC”) ...roc1 <- roc(myDatalabel,myDatalabel, myDatascore) roc2 <- roc(myData2label,myData2label, myData2score) plot(roc1, col=”blue”) plot.roc(roc2, add=TRUE, col=”r
  • ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣。 AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般...
  • 在进行某诊断方法的评估是,我们常常要用到ROC曲线。这篇博文将简要介绍ROC曲线以及用SPSS及medcal绘制ROC曲线的方法。 定义  ROC受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线)...
  • ROC曲线学习总结

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

    万次阅读 2015-07-28 21:10:01
    (PS:下述内容或许部分表述有误,请谨慎参考,但以下操作本人均测试正常;本文很多内容参考了...内容:利用R语言绘制ROC曲线并计算AUC 平台:R 2.15.3 1. 吐槽一大堆,省略xxx字 2. 准备工作 2.1 安装 R  2.2 安装
  • 基于python绘制ROC曲线

    万次阅读 2018-07-18 17:45:28
    基于python绘制ROC曲线,直接附代码: from sklearn.metrics import roc_curve, auc from sklearn.model_selection import train_test_split ##划分数据集 X_train, X_test, y_train, y_test = train_test_split(X,...
  • roc_curve的正确理解——说得透彻

    千次阅读 2019-03-21 22:21:21
    ROC曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见这里。这篇博文简单介绍ROC和AUC的特点,以及更为深入地,讨论如何作出ROC曲线图以及计算AUC。 ROC和AUC介绍以及如何计算...
  • 用R语言绘制ROC曲线

    万次阅读 2019-02-28 14:01:50
    1 roc曲线的意义 ROC曲线就是用来判断诊断的正确性,最理想的就是曲线下的面积为1,比较理想的状态就是曲线下的面积在0.8-0.9之间,0.5的话对实验结果没有什么影响。 如图: 2代码部分 install.packages(...
  • 如何绘制ROC曲线

    万次阅读 2017-04-28 17:13:07
    机器学习 roc曲线 混淆矩阵
1 2 3 4 5 ... 20
收藏数 25,825
精华内容 10,330
关键字:

roc