大家都发表下对着俩曲线的理解吧。

分类、检索中的评价指标很多,Precision、Recall、Accuracy、F1、ROC、PR Curve......

一、历史

wiki上说,ROC曲线最先在二战中分析雷达信号,用来检测敌军。诱因是珍珠港事件;由于比较有用,慢慢用到了心理学、医学中的一些检测等应用,慢慢用到了机器学习、数据挖掘等领域中来了,用来评判分类、检测结果的好坏。

百科:ROC曲线指受试者工作特征曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性和特异性的相互关系,它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性,再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线,曲线下面积越大,诊断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。

二、原理

这里就拿最经典的二分类(0、1)问题讨论吧,分类器分类之后,往往会得到对每个样本是哪一类的一个估计,像是LR模型就会将这个估计规范化到【0,1】,根据这个估计,你选择一个阈值p_0,就可以将分类结果映射到0,1了;分类效果好不好跟真实的label比比就行了。

所以你手里有decision和label两个向量,用来做分类结果的评估。

要看ROC的原理,总离不开上面这个表格,ROC绘制的就是在不同的阈值p_0下,TPR和FPR的点图。所以ROC曲线的点是由不同的p_0所造成的。所以你绘图的时候,就用不同的p_0采点就行。

Precision-Recall曲线,这个东西应该是来源于信息检索中对相关性的评价吧,precision就是你检索出来的结果中,相关的比率;recall就是你检索出来的结果中,相关的结果占数据库中所有相关结果的比率;所以PR曲线要是绘制的话,也是对cutoff进行遍历,这样也得到了不同的precision和recall的点。例如你选择了一个cutoff,从而根据cutoff判别分类的结果1或0。1就是检索返回的结果,0就是没有返回的结果。

数据库里有500条记录,其中50个是相关的(正样本),你通过一个cutoff,返回了75个1,其中只有45个是真正相关的;

那么在这个cutoff对应下的recall=45/50=0.9,precision=45/75=0.6。坐标就是(0.9,0.6),在这里绘制一个点吧。

可以看出TPR和Recall的形式是一样的,就是查全率了,FPR就是保证这样的查全率你所要付出的代价,就是把多少负样本也分成了正的了。

上面是我的理解,不知道对不对。

三、AUC的计算

为了更好的衡量ROC所表达结果的好坏,Area Under Curve(AUC)被提了出来,简单来说就是曲线右下角部分占正方形格子的面积比例;那么计算这个东西其实就很简单了,根据reference的paper,有很多很多计算方法,这里推荐一种近似采样的方法:采样。

你的分类器能够将正例排在负例前面的概率是多少,也就是采样中正例的decision>负例的decision的概率。

1

2

3

4

5

6auc sample(neg.decision,1000,replace=T))

## or

aucs sample(neg.decision,1000,replace=T)))

auc2

其实这个可以等价于对于不规则图形的面积的采样估计了。谁能给推导一下?

四、ROC中最优的p_0的计算

简单理解下的话,保证TPR同时代价FPR要尽量的小,是不是可以建立max(TPR+(1-FPR))的模型,然后选p_0呢?

paper中有更加详细的方法。谁给详细介绍下?

五、ROC和PR曲线之间的关系和不同

当正负样本差距不大的情况下,ROC和PR的趋势是差不多的,但是当负样本很多的时候,两者就截然不同了,ROC效果依然看似很好,但是PR上反映效果一般,还需要继续努力啊。解释起来也简单,假设就1个正例,100个负例,那么基本上TPR可能一直维持在100左右,然后突然降到0.

ROC and precision-recall curves under class skew. (a) ROC curves, 1:1; (b) precision-recall curves, 1:1; (c) ROC curves, 1:10 and (d) precisionrecall

六、具体例子和代码

(1)数据集

用的libsvm的那个270个样本的数据集,用LR模型做了一下:

0.688312721844616 1

0.461679176682519 0

0.405016268379421 1

0.693999977303342 0

0.391868684948981 0

0.526391961908057 0

0.570470938139219 1

0.708771207269333 1

0.700976655664182 1

0.713584109310541 1

0.545180177320974 0

0.646156295395112 0

0.347580513944893 0

0.391577777998607 1

....

(2)ROC曲线和PR曲线

R语言的ROCR绘制的图形:

代码:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16library(ROCR)

a=read.table("toy.txt")

a

pred

perf

auc.tmp

auc

auc

plot(perf,colorize=TRUE,lwd=5,xlab="FPR",ylab="TPR", main=paste("AUC=",auc*100,"%"))

grid(5, 5, lwd = 1)

lines(par()$usr[1:2], par()$usr[3:4], lty=2, lwd=2, col="grey")

自己写代码绘制图像和估算AUC的值,AUC和ROCR包计算的还是很接近的:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37a

a

label

decision

ngrids

TPR

FPR

p0

for(i in 1:ngrids)

{

p0[i]

pred_label p0[i])

TPR[i]

FPR[i]

}

## compute AUC

pos.decision

neg.decision

auc sample(neg.decision,1000,replace=T))

## or

aucs sample(neg.decision,1000,replace=T)))

auc2

plot(FPR, TPR, col=4,lwd=5, type="l", main=paste("AUC=",auc2*100,"%"))

grid(5, 5, lwd = 1)

points(c(0,1), c(0,1), type="l", lty=2, lwd=2, col="grey")

##

cut.op

PR曲线:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

a

a

label

decision

ngrids

P

R

p0

A

for(i in 0:ngrids)

{

p0[i]

pred_label p0[i])

R[i]

P[i]

A[i]

}

plot(R, P, col=4,lwd=5, type="l",xlab="Recall",ylab="Precision", main="PR Curve")

grid(5, 5, lwd = 1)

accuracy

七、Reference

[1]Tom Fawcett:An introduction to ROC analysis

[2]Jesse Davis,Mark Goadrich:The Relationship Between Precision-Recall and ROC Curves

[3]https://en.wikipedia.org/wiki/Receiver_operating_characteristic

[4]http://baike.baidu.com/view/42249.htm

matlab pr曲线实例,再理解下ROC曲线和PR曲线 | 丕子相关推荐

  1. 深入理解ROC曲线的定义以及绘制ROC曲线过程,其与模型性能的关系,以及AUC

    深入理解ROC曲线的定义以及绘制ROC曲线过程,其与模型性能的关系,以及AUC 很多学习器是为测试样本产生一个实值或者是概率预测,然后将这个预测值和一个分类阈值(threshold)进行比较.若大于阈 ...

  2. roc曲线的意义_Pre / Rec / ROC / PR

    Precision 和 Recall值是既矛盾又统一的两个指标,为了提高 Precision 值,分类器需要尽量在 "更有把握" 时(即,提高分类阈值!)才把样本预测为正样本,但此 ...

  3. 数据挖掘 python roc曲线_利用scikitlearn画ROC曲线实例

    一个完整的数据挖掘模型,最后都要进行模型评估,对于二分类来说,AUC,ROC这两个指标用到最多,所以 利用sklearn里面相应的函数进行模块搭建. 具体实现的代码可以参照下面博友的代码,评估svm的 ...

  4. python 一球从100m高度落下,一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?Python实例...

    一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?Python实例 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半 ...

  5. JS中this的应用场景,再了解下apply、call和bind!

    this的应用场景,再了解下apply.call和bind 一.谈谈对this对象的理解 二.this的应用场景 1.作为普通函数被调用 2.使用call.apply和bind被调用 3.作为对象方法 ...

  6. innodb实例损坏情况下恢复数据及相关工具的开发

    作者介绍:谢浩,现任职于云和恩墨(北京)信息技术有限公司,具有多年oracle数据库企业级运维经验,擅长结合业务.硬件系统制定各种项目方案,具有丰富mysql相关的工作经验. 假设你在使用MySQL中 ...

  7. matlab nntool教程,Matlab nntool 应用实例教材.doc

    Matlab nntool 应用实例 在MATLAB命令窗口中键入nntool再按enter,会自动弹出下面的Network/Data Manager窗口画面 Inputs:输入值 Targets:目 ...

  8. Mcad学习笔记之委托再理解(delegate的构造器,MulticastDelegate,BeginInvoke,EndInvoke,Invoke4个方法的探讨)...

    相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...

  9. 什么是ROC曲线?为什么要使用ROC?以及 AUC的计算

    一.ROC简介 ROC的全名叫做Receiver Operating Characteristic,中文名字叫"受试者工作特征曲线",其主要分析工具是一个画在二维平面上的曲线--R ...

  10. 【1023】KANO模型再理解

    结合自己的理解,试着把KANO模型本地化翻译一下,希望对大家平时做产品的过程有用. KANO模型 上图是原始模型,现在我改下说法,三条曲线从"功能"的角度去理解. 最下面一条曲线叫 ...

最新文章

  1. Ubuntu 想要更新源 报错 “E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)”
  2. Advanced Installer 制作.NetWeb部署安装包
  3. 跟着官方文档能学懂React Hooks就怪了
  4. centos7查看当前cpu运行模式_杂集:centos7中设置服务开机自启的两种方法,欢迎补充...
  5. 回来来看初学C语言的一些有趣的图形的输出
  6. 浏览器和服务器交互原理?(请求--响应的过程)
  7. html js 处理元素的数据属性(data)
  8. 5.FlashFXP连接失败(连接已拒绝)及530 permission denied(以root用户连接已被客户端关闭)
  9. 对格斗游戏的一点想法
  10. 禁用U盘,不影响其他设备的使用
  11. 人员-组织 结构 数据库关系设计
  12. SMILES学习笔记
  13. 记录安装python+appium+模拟器的自动化
  14. matlab采样率为100hz,matlab自己设计一个低通滤波器,要求滤出100Hz之外的频率,采样率为10000Hz...
  15. RDS认证辅导,所有RDS原料、辅料都有追溯性文件必须通过CU证书
  16. 塑料壳上下扣合的卡扣设计_读书笔记-塑胶外壳卡扣设计
  17. 昨夜阿里实习生笔试:印象深刻的几道题
  18. 联合国发布AI报告:自动化和AI对亚洲有巨大影响
  19. 漫画主动学习:人工智能居然被PUA了?
  20. Proguardgui

热门文章

  1. Mugeda(木疙瘩)H5案例课—房地产楼书H5制作-岑远科-专题视频课程
  2. SoX 音频处理工具使用方法
  3. java实现马尔科夫链,马尔科夫链算法的JAVA实现
  4. ddr3ddr4 lpddr4速率_LPDDR3一定弱?实测对比单双通道DDR4
  5. colmak键盘_人小鬼大,ikbc 新款 Poker 2 机械键盘体验分享
  6. 重磅!Pandownload开发者被抓,一代神器落幕!
  7. SSM框架---开发免费小说网站(h5+电脑端)
  8. Kvaser Memorator数据记录仪通过KVmlib配置和读取SD卡
  9. DelphiIE插件开发
  10. centos7 ies4linux,Ubuntu 7.10中通过IEs4linux安装IE6