zoukankan      html  css  js  c++  java
  • roc曲线和auc

    只是为了复习一下,在评价分类器的性能好坏时,通常用recall和precision,

    PS:CNN做图像分类还是用了loss 和 accuracy

    使用ROC的目的在于更好的(直观+量化)评价分类模型性能

    举个例子:对于0-1两分类的情况,测试样本中有A类样本90个,B 类样本10个。分类器C1把所有的测试样本都分成了A类,分类器C2把A类的90个样本分对了70个,B类的10个样本分对了5个。

    则C1的分类精度为 90%,C2的分类精度为75%。但是,显然C2更有用些。另外,在一些分类问题中犯不同的错误代价是不同的(cost sensitive learning)。

    这样,默认0.5为分类阈值的传统做法也显得不恰当了。不同阈值的划分结果不同。

    定义:

    关于两类分类问题,原始类为positive、negative,分类后的类别为p'、n'。排列组合后得到4种结果,如下图所示:

    于是我们得到四个指标,分别为:真阳、伪阳、伪阴、真阴。ROC空间将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。这两个值由上面四个值计算得到,公式如下:

      TPR:在所有实际为阳性的样本中,被正确地判断为阳性之比率。TPR=TP/(TP+FN)
      FPR:在所有实际为阴性的样本中,被错误地判断为阳性之比率。FPR=FP/(FP+TN)
      放在具体领域来理解上述两个指标。如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。
     
    ROC的图形化展示:
    我们以FPR为横轴,TPR为纵轴,得到如下ROC空间:

     

    我们可以看出:左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对;点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点C(TPR<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听,为真庸医。

    上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到ROC曲线。还是一开始的那幅图,假设如下就是某个医生的诊断统计图,直线代表阈值。我们遍历所有的阈值,能够在ROC平面上得到如下的ROC曲线。

     最核心的这张图来了:

     

    曲线距离左上角越近,证明分类器效果越好。

    AUC的定义:

    AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

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

     AUC的物理意义:

    假设分类器的输出是样本属于正类的socre(置信度),则AUC的物理意义为,任取一对(正、负)样本,正样本的score大于负样本的score的概率。

    AUC的计算:

           (1)第一种方法:AUC为ROC曲线下的面积,那我们直接计算面积可得。面积为一个个小的梯形面积之和,计算的精度与阈值的精度有关。

      (2)第二种方法:根据AUC的物理意义,我们计算正样本score大于负样本的score的概率。取N*M(N为正样本数,M为负样本数)个二元组,比较score,最后得到AUC。时间复杂度为O(N*M)。
      (3)第三种方法:与第二种方法相似,直接计算正样本score大于负样本的score的概率。我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,rank=n(n=N+M),其次为n-1。那么对于正样本中rank最大的样本(rank_max),有M-1个其他正样本比他score小,那么就有(rank_max-1)-(M-1)个负样本比他score小。其次为(rank_second-1)-(M-2)。最后我们得到正样本大于负样本的概率为:时间复杂度为O(N+M)。

    声明:本文只是自我复习使用,内容完全参考自:https://www.cnblogs.com/gatherstars/p/6084696.html

  • 相关阅读:
    JS重修札记
    backbone简单札记
    通用前端开发框架(一)
    两天低效编程总结
    使用HTTP请求 查找指定位置附近的景点(GOOGLE 地图)
    Google Map上,加上座標點(POIs)
    iphone 反向地理解析 从坐标获得用户的具体位置信息
    iphone 计算大文件md5
    c#多线程下载
    iphone http同步 异步请求
  • 原文地址:https://www.cnblogs.com/marszhw/p/10759997.html
Copyright © 2011-2022 走看看