在R(或任何其他平台/语言)中,ROC曲线的计算可以被拆分并并行执行。我正在做一个w/ 150k行的计算,使用pROC
包进行每次计算大约需要5-7分钟。对于更快的AUC或ROC计算,任何其他建议都将不胜感激。谢谢。
发布于 2011-11-13 00:01:17
ROC曲线的计算应该相当快,因为它实际上只是对结果进行排序并计算累积比例和,但我猜你正在做一些更复杂的事情(或者你正在以一种非常低效的方式做这件事)。这说明了15000个点的ROC曲线的构造。几乎是瞬间的(在150K的情况下确实稍微慢了一点,但仍然不到2秒):
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)
发布于 2017-11-28 13:20:00
screechOwl。我很清楚这篇文章来自6年前。当我在寻找更有效的方法来计算AUC时,我遇到了这个问题。
我最近写了一个函数,它极大地减少了获取AUC值所需的时间,它也适用于因子。
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-“建议的方法。
希望这能有所帮助。
https://stackoverflow.com/questions/8105451
复制相似问题