我发现了与此类似的问题,但并没有解决我的问题:我使用插入号和游侠方法来拟合随机森林,然后使用预测来预测我的评估数据。这可行。但是,当我尝试获取预测概率时,出现以下错误:
[.data.frame(out,,obsLevels,drop = FALSE)中的错误:未定义的列已选择
代码(示例)
require(caret)
mtcars$carb <- as.factor(mtcars$carb)
tuneGrid <- expand.grid(mtry = c(10), min.node.size = c(1), splitrule = "extratrees")
rf_model<-train(carb~.,data=mtcars,method="ranger",
trControl=trainControl(method="none")
, tuneGrid = tuneGrid
)
predict(rf_model, mtcars, type="prob")
Run Code Online (Sandbox Code Playgroud)
我确保碳水化合物是其他地方建议的因素。
有什么想法吗?
有几个问题。首先,此方法要求因子的类级别遵循有效的R变量名称的约定,因此第一步,重命名carb因子的级别以字母开头
mtcars$carb <- as.factor(paste0("c",mtcars$carb))
Run Code Online (Sandbox Code Playgroud)
其次,TrainControl中classProbs的默认参数设置为FALSE。这应该TRUE在您的情况下。
library("caret")
tuneGrid <- expand.grid(mtry = c(10), min.node.size = c(1), splitrule = "extratrees")
rf_model <- train(carb ~ ., data = mtcars, method = "ranger",
trControl = trainControl(method = "none", classProbs = TRUE),
tuneGrid = tuneGrid)
classprobs <- predict(rf_model, newdata = mtcars, type = "prob")
Run Code Online (Sandbox Code Playgroud)