首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ROC曲线计算是可以拆分进行并行处理的吗?

ROC曲线计算是可以拆分进行并行处理的吗?
EN

Stack Overflow用户
提问于 2011-11-12 23:38:50
回答 2查看 607关注 0票数 2

在R(或任何其他平台/语言)中,ROC曲线的计算可以被拆分并并行执行。我正在做一个w/ 150k行的计算,使用pROC包进行每次计算大约需要5-7分钟。对于更快的AUC或ROC计算,任何其他建议都将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-13 00:01:17

ROC曲线的计算应该相当快,因为它实际上只是对结果进行排序并计算累积比例和,但我猜你正在做一些更复杂的事情(或者你正在以一种非常低效的方式做这件事)。这说明了15000个点的ROC曲线的构造。几乎是瞬间的(在150K的情况下确实稍微慢了一点,但仍然不到2秒):

代码语言:javascript
运行
复制
 testres <- data.frame(res=rnorm(15000), cat=rbinom(15000,1, .2))
 require(ROCR)
 pred <- prediction(testres$res, testres$cat)
 perf <- performance(pred,"tpr","fpr")
plot(perf)
票数 5
EN

Stack Overflow用户

发布于 2017-11-28 13:20:00

screechOwl。我很清楚这篇文章来自6年前。当我在寻找更有效的方法来计算AUC时,我遇到了这个问题。

我最近写了一个函数,它极大地减少了获取AUC值所需的时间,它也适用于因子。

代码语言:javascript
运行
复制
AUROC <- function(Target, Prediction){
  if(is.numeric(Prediction) == T){
    Order <- order(Prediction)
    Order <- Order[!Order %in% which(is.na(Prediction))]
    Prediction <- Prediction[Order]
    Target <- Target[Order]

    FP <- cumsum(!Target)/sum(!Target)
    TP <- cumsum(Target)/sum(Target)

    Repeated <- c(Prediction[-1] == Prediction[-length(Prediction)], FALSE)

    FP <- c(0, FP[!Repeated], 1)
    TP <- c(0, TP[!Repeated], 1)

    } else if(is.factor(Prediction) == T | is.character(Prediction) == T){

    DT1 <- data.table(Y = Target, X = Prediction)
    DT1 <- DT1[, list(Event = sum(Y),
                      `Non Event` = sum(!Y)),
               by = X]
    DT1[, Probability := Event / (Event + `Non Event`)]
    DT1 <- DT1[order(Probability), ]

    FP <- c(0, cumsum(DT1[, `Non Event`])/ sum(DT1[, `Non Event`]), 1)
    TP <- c(0, cumsum(DT1[, Event])/ sum(DT1[, Event]), 1)

    } 

    N <- length(FP)
    TP_avg <- (TP[-1] + TP[-N])/ 2
    FP_dif <- FP[-1] - FP[-N]

    Area <- sum(TP_avg * FP_dif)
    Results <- 0.5 + abs(Area - 0.5)
    return(Results)
}

然而,我想说这主要是John Mount的贡献。(http://www.win-vector.com/blog/2016/10/on-calculating-auc/)

我添加的部分本质上是处理因素的能力。请注意,通过在最后几行中进行一些修改,您可以获得此函数来绘制ROC曲线。我的发现表明,这比使用预测()、性能()和绘图()的方法要好,直到几百万行左右,可能是因为更高的开销。超过这一点,最好坚持"42-“建议的方法。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8105451

复制
相关文章

相似问题

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