2017-05-28 6 views
1

Ich möchte die Fläche unter der Kurve (AUC) von meinem Binärklassifizierer nach Kreuzvalidierung mit dem caret Paket erhalten.AUC aus gemittelten Klassenwahrscheinlichkeiten in Caret R

Für die Standard-Konfusionsmatrix verwende ich das average Argument in der caret::confusionMatrix.

Beispiel:

controls = trainControl(method="repeatedcv" 
        , number=5 
        , repeats=10 
        , selectionFunction = "oneSE" 
        , classProbs = T 
        , summaryFunction = twoClassSummary 
) 

svm_5k = train(veracity ~ . 
      , data = training_data 
      , method = "svmLinear" 
      , trControl = controls 
      , verbose = FALSE 
      , metric = 'ROC' 
) 

Und dann die Verwirrung Matrix für Genauigkeit verwendet, F1 usw.

confmat = caret::confusionMatrix(svm_5k 
          , 'average') 

Jetzt habe ich mit der AUC kämpfen: Ich bin jetzt das Abrufen der Klasse probs und befestigen diese als Spalte zu den Testdaten, wie testing_data$prob = predict(svm_5k, testing_data, type='prob')[,2]

Wenn ich dann über das pROC Paket die AUC wie

01 zu erhalten,

roc(response = testing_data$veracity, predictor = testing_data$prob) ...

... Ich bin nicht mit der Kreuzvalidierung wie im controls sondern nur die Momentaufnahme des Klassifikator angegeben.

Gibt es eine Möglichkeit, die gemittelten Wahrscheinlichkeiten aus dem Lebenslauf zu verwenden, um die AUC zu erhalten?

Antwort

0

versuchen

predict = predict(svm_5k, testing_data) 
roc <- roc(testing_data$veracity, as.numeric(predict)) 

jetzt u all das Zeug u von roc brauchen erhalten können wie Empfindlichkeiten, Besonderheiten und Fläche unter der Kurve.

auc <- auc(roc) 
sens <- roc$sensitivities[2] 
spec <- roc$specificities[2] 
+0

Aber das würde nicht den Durchschnitt der verschiedenen Lebensläufe geben. Wie du es beschreibst, ist es ähnlich wie bei mir. Ich möchte jedoch vermeiden, Vorhersagen aus nur einer Iteration zu erhalten, sondern den Durchschnitt aller CV-Wiederholungen. –

+0

Idk Ich hatte eine ähnliche Aufgabe, aber ich verwendete 10-fache Kreuzvalidierung, machte ein Feld von Auc. In For-Loops habe ich sie verkettet und am Ende habe ich Mean verwendet. – grahinho

Verwandte Themen