ROC曲线与AUC以及LIFT
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<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听,为真庸医。
上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到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代码:
[plain] view plain copy print?
- 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);
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;elseN=N+1;end
end
sigma=0;
for i=M+N:-1:1if(test_targets(I(i))==1)sigma=sigma+i;end
end
result=(sigma-(M+1)*M/2)/(M*N);
ROC曲线与AUC以及LIFT相关推荐
- 分类模型的ROC曲线、AUC值、GINI系数、Lift、Gain、KS指标分别是什么?计算公式是什么?有什么意义?
分类模型的ROC曲线.AUC值.GINI系数.Lift.Gain.KS指标分别是什么?计算公式是什么?有什么意义? 目录
- 机器学习(16)ROC曲线与AUC指标(癌症分类的模型检测--AUC指标)
目录 一.基础理论 0.引言 1.TPR与FPR 1.TPR(召回率) 2.FPR 2.ROC曲线 3.AUC指标 二.癌症分类的模型检测(AUC指标) 1.正反例转1.0 2.计算AUC指标 总代码 ...
- 为多模型寻找模型最优参数、多模型交叉验证、可视化、指标计算、多模型对比可视化(系数图、误差图、混淆矩阵、校正曲线、ROC曲线、AUC、Accuracy、特异度、灵敏度、PPV、NPV)、结果数据保存
使用randomsearchcv为多个模型寻找模型最优参数.多模型交叉验证.可视化.指标计算.多模型对比可视化(系数图.误差图.classification_report.混淆矩阵.校正曲线.ROC曲 ...
- R语言使用pROC包在同一图中绘制两条ROC曲线并通过假设检验检验ROC曲线的AUC或者偏AUC的差异(输出p值)
R语言使用pROC包在同一图中绘制两条ROC曲线并通过假设检验检验ROC曲线的AUC或者偏AUC的差异(输出p值) 目录
- 「机器学习速成」分类,评估指标(TP、FP、TN、FN),ROC曲线和AUC
https://www.toutiao.com/a6706449645901464078/ 2019-06-25 20:49:47 大家好,今天我们学习[机器学习速成]之 分类,评估指标(TP.FP. ...
- 多分类下的ROC曲线和AUC
本文主要介绍一下多分类下的ROC曲线绘制和AUC计算,并以鸢尾花数据为例,简单用python进行一下说明.如果对ROC和AUC二分类下的概念不是很了解,可以先参考下这篇文章:机器学习之分类器性能指标之 ...
- 机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率
北京 | 高性能计算之GPU CUDA课程11月24-26日3天密集学习 快速带你晋级阅读全文> 在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度.错误率指的是在所有测试样例中错分 ...
- 混淆矩阵、准确率、召回率、ROC曲线、AUC
混淆矩阵.准确率.召回率.ROC曲线.AUC 假设有一个用来对猫(cats).狗(dogs).兔子(rabbits)进行分类的系统,混淆矩阵就是为了进一步分析性能而对该算法测试结果做出的总结.假设总共 ...
- ROC曲线与AUC区域的理解与实践
Receiver Operating Characteristic Area Under the Curve (ROC and AUC). 如何向别人解释 ROC AUC 对评价机器学习算法的意义: ...
最新文章
- 李开复:不是言AI必称中美,而是欧洲太堂吉诃德
- Python 中函数(function)的用法
- 注意力机制 神经网络_图注意力网络(GAT)
- 初学 Ajax(涉及 php)
- (三十九)数据的持久化存储-plist实现(XML属性表)
- 使用 Dawn 构建 React 项目
- android汉字转拼音
- 【滤波器】7. 带通滤波器
- 【Day2.1】时差为看日出创造了条件
- SQL Server 认证(Certification)
- 【Java并发编程的艺术】读书笔记——Java并发编程基础
- java.net cidr接口_【算法】CIDR集合的算法
- 常用开发工具 之 SQLite 数据库 与 Navicat for SQLite 的下载、安装与简单使用说明
- [Error] expected declaration or statement at end of input
- I2C接口控制器之协议解析
- 突发奇想想用C解决高中排列组合问题
- epic服务器状态,对 Epic Games 启动程序问题进行故障排除
- AD17在丝印层添加汉字
- iview/view UI 表格+表单提交必填验证简单方案
- 新2022年合肥市工业设计中心奖励申报条件及认定管理办法
热门文章
- Liunux 编程遇到的SIGBUS信号
- azure 入门_Azure Databricks入门指南
- aws rds监控慢sql_使用AWS Backup备份AWS RDS SQL Server数据库
- 在SQL Server中读取事务日志-从黑客到解决方案
- 使用Windows Performance Monitor进行SQL Server性能调整
- SpringBoot项目从Git拉取代码并完成编译打包启动的sh自动脚本
- 使用WMI编程获取主机硬件信息(CPU_ID,硬盘、主板、BIOS序列号,Mac地址)
- JS处理Cookie
- jQuery中的$.getJSON、$.ajax、$.get、$.post的区别
- 在ionic2中集成swiper插件