ROC曲线

对于0,1两类分类问题,一些分类器得到的结果往往不是0,1这样的标签,如神经网络,得到诸如0.5,0,8这样的分类结果。这时,我们人为取一个阈值,比如0.4,那么小于0.4的为0类,大于等于0.4的为1类,可以得到一个分类结果。同样,这个阈值我们可以取0.1,0.2等等。取不同的阈值,得到的最后的分类情况也就不同。

如下面这幅图:

蓝色表示原始为负类分类得到的统计图,红色为正类得到的统计图。那么我们取一条直线,直线左边分为负类,右边分为正,这条直线也就是我们所取的阈值。

阈值不同,可以得到不同的结果,但是由分类器决定的统计图始终是不变的。这时候就需要一个独立于阈值,只与分类器有关的评价指标,来衡量特定分类器的好坏。

还有在类不平衡的情况下,如正样本90个,负样本10个,直接把所有样本分类为正样本,得到识别率为90%。但这显然是没有意义的。

如上就是ROC曲线的动机。

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

于是我们得到四个指标,分别为真阳,伪阳;伪阴,真阴。

ROC空间将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。这两个值由上面四个值计算得到,公式如下:

TPR:在所有实际为阳性的样本中,被正确地判断为阳性之比率。

TPR=TP/(TP+FN)

FPR:在所有实际为阴性的样本中,被错误地判断为阳性之比率。

FPR=FP/(FP+TN)

放在具体领域来理解上述两个指标。

如在医学诊断中,判断有病的样本。

那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。

而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。

不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。

我们以FPR为横轴,TPR为纵轴,得到如下ROC空间。

我们可以看出,左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。

点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点C(TPR

上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到ROC曲线。

还是一开始的那幅图,假设如下就是某个医生的诊断统计图,直线代表阈值。我们遍历所有的阈值,能够在ROC平面上得到如下的ROC曲线。

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

如上,是三条ROC曲线,在0.23处取一条直线。那么,在同样的低FPR=0.23的情况下,红色分类器得到更高的PTR。也就表明,ROC越往上,分类器效果越好。我们用一个标量值AUC来量化他。

AUC

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

AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。

0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

AUC的物理意义

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

计算AUC:

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

第二种方法:根据AUC的物理意义,我们计算正样本score大于负样本的score的概率。取N*M(N为正样本数,M为负样本数)个二元组,比较score,最后得到AUC。时间复杂度为O(N*M)。

第三种方法:与第二种方法相似,直接计算正样本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)。

MATLAB实现

MATLAB自带plotroc()方法,绘制ROC曲线,参数如下:

plotroc(targets,outputs);

第一个参数为测试样本的原始标签,第二个参数为分类后得到的标签。

两个为行或列向量,相同维数即可。

AUC matlab代码:

function [result]=AUC(test_targets,output)

%计算AUC值,test_targets为原始样本标签,output为分类器得到的标签

%均为行或列向量

[A,I]=sort(output);

M=0;N=0;

for i=1:length(output)

if(test_targets(i)==1)

M=M+1;

else

N=N+1;

end

end

sigma=0;

for i=M+N:-1:1

if(test_targets(I(i))==1)

sigma=sigma+i;

end

end

result=(sigma-(M+1)*M/2)/(M*N);

auc matlab,matlab ROC曲线(receiver operating characteristic)/AUC相关推荐

  1. ROC曲线(Receiver Operating Characteristic Curve)

    分类模型尝试将各个实例(instance)划归到某个特定的类,而分类模型的结果一般是实数值,如逻辑回归,其结果是从0到1的实数值.这里就涉及到如何确定阈值(threshold value),使得模型结 ...

  2. ROC(receiver operating characteristic curve)曲线与ROC分析

    ROC(receiver operating characteristic curve)曲线与ROC分析 目录 ROC(receiver operating characteristic curve) ...

  3. matlab roc曲线,MATLAB画ROC曲线,及计算AUC值

    标签: 根据决策值和真实标签画ROC曲线,同时计算AUC的值 function auc = roc_curve(deci,label_y) %%deci=wx+b, label_y, true lab ...

  4. matlab计算prc曲线auc面积,MATLAB画ROC曲线,及计算AUC值

    根据决策值和真实标签画ROC曲线,同时计算AUC的值 步骤: 根据决策值和真实标签画ROC曲线,同时计算AUC的值: 计算算法的决策函数值deci 根据决策函数值deci对真实标签y进行降序排序,得到 ...

  5. ROC(Receiver Operating Characteristic)曲线简介

    最近在看一些医学和机器学习结合的论文,这些论文里面评价分类器的分类性能最常用的指标之一就是ROC曲线.同时我也注意到在一些涉及到实际应用的场景中,ROC曲线出现的频率也很高.鉴于以上原因,接下来我就对 ...

  6. MATLAB绘制ROC曲线

    ROC曲线(Receiver Operating Characteristic Curve) 1 简介 ROC曲线是用于评估二元分类模型(如Logistic回归)表现优劣的一种工具,其横轴表示假阳性率 ...

  7. 用matlab画出M1和M2的ROC曲线,ROC曲线及其matlab实现ROC曲线的绘画

    ROC曲线(Receiver Operating Characteristic Curve)是利用Classification模型真正率(True Positive Rate)和假正率(False P ...

  8. 【深度学习中模型评价指标汇总(混淆矩阵、recall、precision、F1、AUC面积、ROC曲线、ErrorRate)】

    深度学习中模型好坏的所有评价指标汇总(混淆矩阵.recall.precision.F1score.AUC面积.ROC曲线.ErrorRate) 导航 0.混淆矩阵 1.AUC面积 2.ROC曲线 3. ...

  9. MATLAB绘制ROC曲线并计算AUC值

    最近需要比较不同CNN网络的分类效果,用到了Auc值,所以学习了下用MATLAB绘制ROC曲线并计算Auc值的代码,总结如下. 1. 子函数代码: % 计算AUC值,同时绘制ROC曲线 % 二值分类, ...

最新文章

  1. C#可选参数、命名参数、参数数组
  2. 重磅!UCSF的研究者利用脑机接口首次让患者输出完整句子,展现恢复语言沟通的潜力...
  3. LESSON 11.4 原理进阶:AdaBoost算法流程详解
  4. CodeForces - 1095C Powers Of Two(思维)
  5. 使用 rose 将 c++代码转换为 uml 类图
  6. mysql中ibatis的limit动态传参
  7. html计算x的y,HTML5画布:旋转时计算x,y点
  8. 小猴吃桃matlab,看图写话:小猴吃桃精彩选篇
  9. QT5开发及实例学习之十三Qt5文本编辑功能
  10. runtime的意义
  11. Rpc远程调用框架的设计与实现(2)
  12. Bella团队正在进行Flex Saving v2上线最后的准备工作
  13. [datatable]关于在DataTable中执行DataTable.Select(“条件“)返回DataTable的解决方法
  14. python中read,readline,和readlines的区别 并逐行输出
  15. 激光能类毕业论文文献都有哪些?
  16. 第25节 虚拟专有网络原理及配置命令
  17. 数据结构笔记(王道考研) 第八章:排序
  18. Dynamics 365 New Feature之Rich Text Editor Control
  19. NO7.const和volatile
  20. QGraphicsItem基本图元的添加以及闪烁图元和移动图元的添加

热门文章

  1. 361度宣布新晋世界拳王徐灿为品牌形象代言人
  2. python ios开发环境_程序员的macOS系列:Mac开发环境配置
  3. Delphi常用通讯控件的应用札记
  4. NetOffice - MS Office in .NET
  5. 算法algo_tips、坑点、力扣刷题、Question问题
  6. Spring Boot 开发web网页(helloworld为例)
  7. 简历人员筛选,筛选活跃度、年龄、工作
  8. 如何压缩png图片的大小?
  9. Transactional注解详解
  10. 通过OCR的技术怎么识别护照、港澳通行证信息