首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROC图计算中的ROC曲线[r]

ROC图计算中的ROC曲线[r]
EN

Stack Overflow用户
提问于 2020-06-02 03:56:43
回答 1查看 155关注 0票数 1

我正在尝试在ggplot中创建一条ROC曲线

我自己写的函数,但是当我将我的结果与来自社区(我相信更多)的roc_curve函数的结果进行比较时,我得到了不同的结果。

我想问一下在下面的函数中哪里有错误?

代码语言:javascript
复制
library(ggplot2)
library(dplyr)
library(yardstick)
n <- 300 # sample size
data <- 
data.frame(
  real = sample(c(0,1), replace=TRUE, size=n), 
  pred = sample(runif(n), replace=TRUE, size=n)
)


simple_roc <- function(labels, scores){
  labels <- labels[order(scores, decreasing=TRUE)]
  data.frame(TPR=cumsum(labels)/sum(labels), FPR=cumsum(!labels)/sum(!labels), labels)
}



simple_roc(data$real, data$pred) %>% 
  ggplot(aes(TPR, FPR)) + 
  geom_line()


yardstick::roc_curve(data, factor(real), pred) %>% 
  ggplot(aes(1 - specificity, sensitivity)) + 
  geom_line()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 15:55:44

首先,您需要将ROC曲线锚定在点(0,0)和(1,1)中。

代码语言:javascript
复制
simple_roc <- function(labels, scores){
  labels <- labels[order(scores, decreasing=TRUE)]
  data.frame(
             TPR = c(0, cumsum(labels)/sum(labels), 1),
             FPR = c(0, cumsum(!labels)/sum(!labels), 1)
  )
}

那么数据在ggplot2中的呈现顺序就很重要了。反转线方向会让你离得更近一些:

代码语言:javascript
复制
yardstick::roc_curve(data, factor(real), pred) %>% 
  ggplot(aes(rev(1 - specificity), rev(sensitivity))) + 
  geom_line()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62140022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档