How to compute ROC and AUC under ROC after training using caret in R?

后端 未结 2 492
悲哀的现实
悲哀的现实 2020-12-08 05:32

I have used caret package\'s train function with 10-fold cross validation. I also have got class probabilities for predicted classes by setting

相关标签:
2条回答
  • 2020-12-08 06:11

    A sample example for 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)))
    

    or using pROC and 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
    
    0 讨论(0)
  • 2020-12-08 06:17

    Update 2019. This is what MLeval was written for (https://cran.r-project.org/web/packages/MLeval/index.html), it works with the Caret train output object to make ROCs, PR curves, calibration curves, and calculate metrics, such as ROC-AUC, sensitivity, specificity etc. It just uses one line to do all of this which is helpful for my analyses and may be of interest.

    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
    
    0 讨论(0)
提交回复
热议问题