2016-07-29 41 views
0

Ich habe eine zufällige Gesamtstruktur mit caret Paket für die Vorhersage einer binären Klassifizierungsaufgabe trainiert.Wie erhält man die vorhergesagte Klasse anstelle von Klassenwahrscheinlichkeiten?

library(caret) 
set.seed(78) 
inTrain <- createDataPartition(disambdata$Response, p=3/4, list = FALSE) 
trainSet <- disambdata[inTrain,] 
testSet <- disambdata[-inTrain,] 
ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10) 
grid_rf <- expand.grid(.mtry = c(3,5,7,9)) 
set.seed(78) 
m_rf <- train(Response ~ ., data=trainSet, 
      method= "rf", metric = "Kappa", trcontrol=ctrl, tuneGrid = grid_rf) 

Die Response Variable enthält Werte {Valid, Invalid}. Mit der folgenden ich die Klassenwahrscheinlichkeiten für die Testdaten erhalten:

pred <- predict.train(m_rf, newdata = testSet, 
        type="prob", models=m_rf$finalModel) 

jedoch Ich interessiere mich für die vorhergesagte Klasse zu erhalten heißt Valid oder Invalidstatt Klassenwahrscheinlichkeiten zu erzeugen eine Konfusionsmatrix.

Ich habe bereits das Argument type="raw" in der predict.train Funktion versucht, aber es gibt eine Liste von NAs zurück.

Antwort

0

Es scheint, dass das Caret-Paket (caret_6.0-70) noch Problem mit der Formel-Schnittstelle verfügt. Das Erweitern der Formel von Response ~ . zu dem, das explizit alle Prädiktoren wie dieses Response ~ MaxLikelihood + n1 + n2 + count erwähnt, löst das Problem und predict.train(m_rf, newdata=testSet) gibt die vorhergesagte Klasse zurück.

+0

Wenn es ein Fehler ist, melden Sie es auf der GitHub-Seite von Caret. – phiver

+1

@phiver, ja ich plane, es zu melden, wie es für eine der früheren Versionen des Pakets caret auch gemeldet wurde. Die Versionshinweise der Version (6.0-70) erwähnen, dass dieses Problem behoben wurde. Jedenfalls werde ich den Bug auf GitHub melden –

3

Durch die Zuweisung von type = "prob" in der Funktion predent() fragen Sie gezielt nach Wahrscheinlichkeiten. einfach entfernen sie & es Etiketten liefert

pred <- predict.train(m_rf, newdata = testSet,models=m_rf$finalModel) 
+0

leider funktioniert es nicht für mich, Entfernen von "type = prob" tut nicht gut. das 'pred' empfängt' NAs' –