在使用插入符号训练(()的randomForest对象上使用predict()时发生错误在64位Linux机器上使用R 3.2.0与脱字符6.0-41和randomForest 4.6-10。使用公式
当试图使用predict()
方法使用公式从caret
包与train()
功能培养了randomForest
对象上,该函数返回一个错误。 当通过randomForest()
和/或使用x=
和y=
而不是一个公式训练时,它都运行平稳。
这里是一个工作示例:
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)
中的最后4行,只有第二个p2 <- predict(modRf2, newdata=imp85)
返回以下错误:
Error in predict.randomForest(modRf2, newdata = imp85) :
variables in the training data missing in newdata
似乎此错误的原因是, predict.randomForest
方法使用rownames(object$importance)
来确定用于训练随机森林object
的变量的名称。而综观
rownames(modRf1$importance)
rownames(modRf2$importance)
rownames(modRf3$importance)
rownames(modRf4$importance)
当我们看到:
[1] "stroke" "price" "fuelType"
[1] "stroke" "price" "fuelTypegas"
[1] "stroke" "price" "fuelType"
[1] "stroke" "price" "fuelType"
所以在某种程度上,使用带有公式的caret
train()
功能时,在randomForest
对象的importance
场改变(要素)的名称变量。
这个插入符号的公式和非公式版本之间是否真的存在不一致?或者我错过了什么?
'modRf3 < - 随机森林(X = dataTrain [,C( “中风”, “价格”, “fuelType”)],Y = dataTrain [ “numOfDoors”],数据= imp85) 错误randomForest(x = dataTrain [,c(“stroke”,“price”,“fuelType”)],: object'dataTrain'not found' –
正如你指出的,你没有在你的例子中定义dataTrain,问题不是[可重现的](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。如果我们无法运行代码,要帮助你并不容易并得到和你一样的结果 – MrFlick
我的不好的'dataTrain'应该是'imp85',我在原始问题中编辑了代码,我还在调用中删除了'data = imp85'选项, y'明确提及为t这里没有用。 –