2017-02-06 3 views
0

Ich benutze Caret, um mein Modell (binäre Klassifizierungsaufgabe) zu trainieren. Wie kann ich sicherstellen, dass train() nicht auf der Genauigkeitsmetrik, sondern auf der Spezifitätsmetrik (TN/(TN + FP)) trainiert?Zug auf Spezifität

, was funktioniert auf Genauigkeit:

metric = "Specificity" 

Wer weiß, wie das Modell zu trainieren, um die Spezifität zu optimieren:

control <- trainControl(method="cv", number=10) 
metric <- "Accuracy" 

set.seed(7) 
fit.svm <- train(target_var ~., data=dataset, method="svmRadial", metric=metric, trControl=control) 

Es ist nicht zu ändern funktioniert?

KR, Arnand

Antwort

1

Versuchen Sie das summaryFunction Argument twoClassSummary innen trainControl zusammen mit classProbs = TRUE specifiyng und metric = "Spec" innen train():

control <- trainControl(method="cv", 
         number=10, 
         summaryFunction = twoClassSummary, 
         classProbs = TRUE) 

fit.svm <- train(target_var ~., 
       data=dataset, 
       method="svmRadial", 
       metric="Spec", 
       trControl=control) 
+0

danken, wenn ich Ihre Funktion erhalte ich: ‚Fehler in '[.data.frame' (data,, lvls [1]): undefinierte Spalten ausgewählt ' Wenn ich' trControl 'durch' trainControl 'ersetze funktioniert es, aber ich bekomme das Warnmaß: Warnmeldung: In train.default (x, y, Gewichte = w, ...): Die Metrik "Spec" war nicht in der Ergebnismenge. Genauigkeit wird stattdessen verwendet. – Arnand

+0

siehe edit, wahrscheinlich brauchen Sie 'classProbs = TRUE' in' trainControl() ', und das Dataset muss ein data.frame sein. – mtoto

+0

Es funktioniert mit der Klasse Probs = TRUE, danke! – Arnand