2015-05-21 19 views
5

Ho usato la funzione train del pacchetto con una convalida incrociata di 10 volte. Ho anche avuto le probabilità di classe per le classi previste impostando classProbs = TRUE in trControl, come segue:Come calcolare ROC e AUC sotto ROC dopo l'allenamento usando il caret in R?

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) 

Le previsioni di uscita che sto ottenendo è la seguente.

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 

Ora voglio calcolare ROC e AUC sotto ROC utilizzando questi dati. Come potrei ottenere questo?

+0

Hai fatto una ricerca? Sembra che ci sia un [esempio facile] (http://www.inside-r.org/packages/cran/caret/docs/aucRoc) per questo. – cfh

risposta

17

Un esempio di esempio per 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 
[email protected][[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))) 

o utilizzando pROC e 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 
Problemi correlati