在 R 中使用插入符号进行训练后,如何在 ROC 下计算 ROC 和 AUC?
Posted
技术标签:
【中文标题】在 R 中使用插入符号进行训练后,如何在 ROC 下计算 ROC 和 AUC?【英文标题】:How to compute ROC and AUC under ROC after training using caret in R? 【发布时间】:2015-08-02 16:08:57 【问题描述】:我使用了caret
包的train
函数进行了10 倍交叉验证。通过在trControl
中设置classProbs = TRUE
,我还得到了预测类的类概率,如下所示:
myTrainingControl <- trainControl(method = "cv",
number = 10,
savePredictions = TRUE,
classProbs = TRUE,
verboseIter = TRUE)
randomForestFit = train(x = input[3:154],
y = as.factor(input$Target),
method = "rf",
trControl = myTrainingControl,
preProcess = c("center","scale"),
ntree = 50)
我得到的输出预测如下。
pred obs 0 1 rowIndex mtry Resample
1 0 1 0.52 0.48 28 12 Fold01
2 0 0 0.58 0.42 43 12 Fold01
3 0 1 0.58 0.42 51 12 Fold01
4 0 0 0.68 0.32 55 12 Fold01
5 0 0 0.62 0.38 59 12 Fold01
6 0 1 0.92 0.08 71 12 Fold01
现在我想使用这些数据计算 ROC 下的 ROC 和 AUC。我将如何实现这一目标?
【问题讨论】:
你搜索过吗?这似乎有一个easy example。 @cfh 链接已失效 @baxx 那是四年前的事了……谷歌仍然会找到很多相关的例子。 这是一种直接的方式,还有更多:cran.r-project.org/web/packages/MLeval/index.html。有关详细信息,请参阅下面的答案。 【参考方案1】:AUC 示例:
rf_output=randomForest(x=predictor_data, y=target, importance = TRUE, ntree = 10001, proximity=TRUE, sampsize=sampsizes)
library(ROCR)
predictions=as.vector(rf_output$votes[,2])
pred=prediction(predictions,target)
perf_AUC=performance(pred,"auc") #Calculate the AUC value
AUC=perf_AUC@y.values[[1]]
perf_ROC=performance(pred,"tpr","fpr") #plot the actual ROC curve
plot(perf_ROC, main="ROC plot")
text(0.5,0.5,paste("AUC = ",format(AUC, digits=5, scientific=FALSE)))
或使用pROC
和caret
library(caret)
library(pROC)
data(iris)
iris <- iris[iris$Species == "virginica" | iris$Species == "versicolor", ]
iris$Species <- factor(iris$Species) # setosa should be removed from factor
samples <- sample(NROW(iris), NROW(iris) * .5)
data.train <- iris[samples, ]
data.test <- iris[-samples, ]
forest.model <- train(Species ~., data.train)
result.predicted.prob <- predict(forest.model, data.test, type="prob") # Prediction
result.roc <- roc(data.test$Species, result.predicted.prob$versicolor) # Draw ROC curve.
plot(result.roc, print.thres="best", print.thres.best.method="closest.topleft")
result.coords <- coords(result.roc, "best", best.method="closest.topleft", ret=c("threshold", "accuracy"))
print(result.coords)#to get threshold and accuracy
【讨论】:
train() inforest.model <- train(Species ~., data.train)
不起作用,错误:Error: package e1071 is required
,R 版本 3.5
安装包'e1071'
@RUser 有什么方法可以在 caret 包下计算 auc 吗?我正在使用 twoclasssummary 并且已经将我的 classprob 设置为 true 并且我使用 roc 作为指标,我的预测值和标签都是 0 或 1,我如何计算我的预测的 auc?
专业提示:您可以将其全部格式化为一个长 dplyr
管道,而不是使用临时变量。像这样:library(randomForest); library(ROCR); library(dplyr); library(magrittr); rf_output %>% extract("votes") %>% extract(,2) %>% as.vector() %>% prediction(target) %>% performance("auc") %>% slot("y.values") %>% extract2(1) %>% print()
【参考方案2】:
2019 年更新。这是为 MLeval 编写的 (https://cran.r-project.org/web/packages/MLeval/index.html),它与 Caret 训练输出对象一起使用以生成 ROC、PR 曲线、校准曲线并计算指标,例如 ROC-AUC、灵敏度、特异性等等。它只使用一行来完成所有这一切,这对我的分析很有帮助,并且可能会引起人们的兴趣。
library(caret)
library(MLeval)
myTrainingControl <- trainControl(method = "cv",
number = 10,
savePredictions = TRUE,
classProbs = TRUE,
verboseIter = TRUE)
randomForestFit = train(x = Sonar[,1:60],
y = as.factor(Sonar$Class),
method = "rf",
trControl = myTrainingControl,
preProcess = c("center","scale"),
ntree = 50)
##
x <- evalm(randomForestFit)
## get roc curve plotted in ggplot2
x$roc
## get AUC and other metrics
x$stdres
【讨论】:
以上是关于在 R 中使用插入符号进行训练后,如何在 ROC 下计算 ROC 和 AUC?的主要内容,如果未能解决你的问题,请参考以下文章