由于其相对速度和预处理能力,我更喜欢在拟合模型时使用插入符号。但是,我对如何进行预测感到有些困惑。当比较直接从列车对象做出的预测和从提取的最终模型做出的预测时,我看到了非常不同的数字。列车物体的预测似乎更准确。
library(caret)
library(ranger)
x1 <- rnorm(100)
x2 <- rbeta(100, 1, 1)
y <- 2*x1 + x2 + 5*x1*x2
data <- data.frame(x1, x2, y)
fitRanger <- train(y ~ x1 + x2, data = data,
method = 'ranger',
tuneLength = 1,
preProcess = c('knnImpute', 'center', 'scale'))
predict.data <- data.frame(x1 = rnorm(10), x2 = rbeta(10, 1, 1))
prediction1 <- predict(fitRanger, newdata = predict.data)
prediction2 <- predict(fitRanger$finalModel, data = predict.data)$prediction
results <- data.frame(prediction1, prediction2)
results
我很肯定它与我如何预处理列车对象中的数据有关,但即使我预处理测试数据并使用Ranger模型进行预测,值也是不同的
predict.data.processed <- predict.data %>%
preProcess(method = c('knnImpute',
'center',
'scale')) %>% .$data
results3 <- predict(fitRanger$finalModel, data = predict.data.processed)$prediction
results <- cbind(results, results3)
results
我想从护林员模型中的每个树中提取预测,这是我在插入符号中无法做到的。有什么想法吗?
答案 0 :(得分:1)
为了从最终模型获得与插入符号train
相同的预测,您应该以相同的方式预处理数据。将您的示例与set.seed(1)
一起使用:
插入符号预测:
prediction1 <- predict(fitRanger,
newdata = predict.data)
游侠预测最终模型。 caret预处理用于predict.data
prediction2 <- predict(fitRanger$finalModel,
data = predict(fitRanger$preProcess,
predict.data))$prediction
all.equal(prediction1,
prediction2)
#output
TRUE