如何使用 PRROC 画 ROC 曲线

1. 什么是ROC 曲线?

1.1 曲线的横纵轴

sensitivityrecallhit rate, or true positive rate (TPR)

TPR = TP/P = TP/(TP + FN) 

fall-out or false positive rate (FPR)

FPR = FP/N = FP/(FP + TN)

1.2 ROC曲线:wiki

信号检测理论中,接收者操作特征曲线receiver operating characteristic curve,或者叫ROC曲线)是一种坐标图式的分析工具,用于 (1) 选择最佳的信号侦测模型、舍弃次佳的模型。 (2) 在同一模型中设定最佳阈值

设置不同的阈值,可以得到不同的TPR和FPR

  • 当阈值设定为最高时,亦即所有样本都被预测为阴性,没有样本被预测为阳性,此时在伪阳性率 FPR = FP / ( FP + TN ) 算式中的 FP = 0,所以 FPR = 0%。同时在真阳性率(TPR)算式中, TPR = TP / ( TP + FN ) 算式中的 TP = 0,所以 TPR = 0%

→ 当阈值设定为最高时,必得出ROC座标系左下角的点 (0, 0)。

  • 当阈值设定为最低时,亦即所有样本都被预测为阳性,没有样本被预测为阴性,此时在伪阳性率FPR = FP / ( FP + TN ) 算式中的 TN = 0,所以 FPR = 100%。同时在真阳性率 TPR = TP / ( TP + FN ) 算式中的 FN = 0,所以 TPR=100%

→ 当阈值设定为最低时,必得出ROC座标系右上角的点 (1, 1)。

  • 因为TP、FP、TN、FN都是累积次数,TN和FN随着阈值调低而减少(或持平),TP和FP随着阈值调低而增加(或持平),所以FPR和TPR皆必随着阈值调低而增加(或持平)。

→ 随着阈值调低,ROC点 往右上(或右/或上)移动,或不动;但绝不会往左下(或左/或下)移动

1.3 AUC值是什么?它的意义是什么?

AUC值就是正样本排在负样本前面的几率(When using normalized units, the area under the curve (often referred to as simply the AUC) is equal to the probability that a classifier will rank a randomly chosen positive instance higher than a randomly chosen negative one (assuming 'positive' ranks higher than 'negative').[17])不是特别懂里面提到的公式,可以去wiki里看。

理论上来说当两条ROC曲线重合的时候,我们可以通过他们的AUC大小来判定哪个分类器更好。

所以AUC越大,代表分类器越好。(wiki)

从AUC判断分类器(预测模型)优劣的标准:

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

 

2. 如何使用PRROC画彩虹ROC曲线?

了解完基础知识后,我们在呈现ROC曲线有多种方式,其中一种就是使用彩虹色来标记阈值,

这样做的好处是:我们可以知道什么养的阈值表现出的sensitivity是什么FPR是什么。

又或者我希望我的真阳率优于假阳率,我们可以通过观察阈值决定,哪个阈值更好。我们的阈值是不是接近0.5。

总结一下:

ROCR和pROC是引用比较多的,紧随其后的是14年新发表的。ROCR 04年就出现了一直都是主力马,尽管没有vignette文档,但是documentation说明文档也很好。

pROC是10年发表的,可以在图里面画出来置信曲线。

PRROC是14年新发表的,有超过前两个老牌软件的趋势,特点是它也可以计算precision-recall曲线

ROCR和PRROC都可以画彩色的ROC图片,这里使用PRROC举例子:

input file

Disease

Disease

0.032

0.968

2

4

Fold4

1

2

Disease

Disease

0.096

0.904

6

4

Fold4

1

3

Control

Control

0.850

0.150

18

4

Fold4

0

4

Disease

Control

0.138

0.862

21

4

Fold4

0

5

Disease

Disease

0.088

0.912

28

4

Fold4

1

6

Disease

Disease

0.030

0.970

30

4

Fold4

1

7

Disease

Disease

0.518

0.482

31

4

Fold4

1

8

Control

Control

0.922

0.078

41

4

Fold4

0

9

Disease

Disease

0.356

0.644

42

4

Fold4

1

10

Disease

Disease

0.048

0.952

43

4

Fold4

1

11

Disease

Disease

0.342

0.658

49

4

Fold4

1

12

Disease

Disease

0.030

0.970

51

4

Fold4

1

 

code

library(PRROC)
library(tidyverse)
# filter the prediction output of model object (rf_forest) from R package caret by using the best tunning 

prediction_df <- filter(rf_forest$pred, mtry == 4)


# change the positive group to 1
(prediction_df 就是我们前面粘贴的表格了)

prediction_df$test <- ifelse(prediction_df$obs == "Disease",1,0 )
roc_curve_prediction_df <- PRROC::roc.curve(scores.class0 = prediction_df$Disease, weights.class0=prediction_df$test,
                       curve=TRUE,rand.compute = TRUE) # rand.compute 是0.5的随机分类器,为了画对角线的


#画图
par(cex.axis=2, cex.lab =1.6,font.axis =1.6)
plot(roc_curve_prediction_df,rand.plot = TRUE,auc.main=FALSE,legend =4,lwd=5)
text(1, 0.5, paste('AUC =', ' ',round(roc_curve_prediction_df$auc, digits = 3), sep =""), cex=1.4, font=2, col='black')


# 如果想用ggplot2自己画图,可以把这个矩阵提取出来

roc_curve_prediction_df$auc 

# 三列 分别对应 x轴坐标 y轴坐标 阈值颜色

图片示例:

  

可以看到阈值越大,那么sensitivity越小,FPR也越小;阈值越小,sensitivity越大,FPR也越大。

 

Ref: (感谢下面的帖子!)

https://rviews.rstudio.com/2019/03/01/some-r-packages-for-roc-curves/ 

https://www.jianshu.com/p/c61ae11cc5f6 

https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve

https://zh.wikipedia.org/wiki/ROC%E6%9B%B2%E7%BA%BF

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值