Verwenden von R 3.2.0 mit caret 6.0-41 und randomForest 4.6-10 auf einer 64-Bit-Linux-Maschine. Fehler bei der Verwendung von predict() für ein mit caret train trainiertes randomForest-Objekt() mithilfe der Formel
Beim Versuch, die predict()
Methode auf ein Objekt mit der randomForest
train()
Funktion aus dem Paket caret
ausgebildeten zu verwenden, um eine Formel verwendet wird, gibt die Funktion einen Fehler zurück. Beim Training über randomForest()
und/oder x=
und y=
anstelle einer Formel läuft alles reibungslos. Hier
ist ein funktionierendes Beispiel:
library(randomForest)
library(caret)
data(imports85)
imp85 <- imports85[, c("stroke", "price", "fuelType", "numOfDoors")]
imp85 <- imp85[complete.cases(imp85), ]
imp85[] <- lapply(imp85, function(x) if (is.factor(x)) x[,drop=TRUE] else x) ## Drop empty levels for factors.
modRf1 <- randomForest(numOfDoors~., data=imp85)
caretRf <- train(numOfDoors~., data=imp85, method = "rf")
modRf2 <- caretRf$finalModel
modRf3 <- randomForest(x=imp85[,c("stroke", "price", "fuelType")], y=imp85[, "numOfDoors"])
caretRf <- train(x=imp85[,c("stroke", "price", "fuelType")], y=imp85[, "numOfDoors"], method = "rf")
modRf4 <- caretRf$finalModel
p1 <- predict(modRf1, newdata=imp85)
p2 <- predict(modRf2, newdata=imp85)
p3 <- predict(modRf3, newdata=imp85)
p4 <- predict(modRf4, newdata=imp85)
Unter den letzten 4 Zeilen, nur die zweite p2 <- predict(modRf2, newdata=imp85)
den folgenden Fehler zurückgibt:
Error in predict.randomForest(modRf2, newdata = imp85) :
variables in the training data missing in newdata
Es scheint, dass der Grund für diesen Fehler ist, dass Die Methode predict.randomForest
verwendet rownames(object$importance)
, um den Namen der Variablen zu ermitteln, die zum Trainieren der Zufallswaldstruktur object
verwendet werden. Und wenn bei
rownames(modRf1$importance)
rownames(modRf2$importance)
rownames(modRf3$importance)
rownames(modRf4$importance)
suchen Wir sehen:
[1] "stroke" "price" "fuelType"
[1] "stroke" "price" "fuelTypegas"
[1] "stroke" "price" "fuelType"
[1] "stroke" "price" "fuelType"
Also irgendwie, wenn sie mit einer Formel, die die caret
train()
Funktion ändert den Namen des (Faktor) Variablen im importance
Feld des randomForest
Objekt .
Ist es wirklich eine Inkonsistenz zwischen der Formel und der Nicht-Formel Version der Caret train()
Funktion? Oder fehlt mir etwas?
'modRf3 <- Random (x = Datatrain [c ("Hub", "Preis", "fuelType")], y = Datatrain [ "numOfDoors"], data = imp85) Fehler bei randomForest (x = dataTrain [, c ("stroke", "price", "fuelType")],: Objekt 'dataTrain' nicht gefunden ' –
Wie bereits erwähnt, haben Sie in Ihrem Beispiel nicht 'dataTrain' definiert Problem ist nicht [reproduzierbar] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) Es ist nicht einfach, Ihnen zu helfen, wenn wir den Code nicht ausführen können und bekomme die gleichen Ergebnisse wie du. – MrFlick
Meine schlechte, 'DataTrain' hätte' imp85' sein sollen, ich habe den Code in der ursprünglichen Frage bearbeitet.Ich habe auch die Option 'data = imp85' im Aufruf entfernt, wo' x' und ' y 'werden explizit als t erwähnt Hier nützt es nichts. –