首页 文章

Caret返回与插入符号列车对象不同的预测,而不是提取的最终模型

提问于
浏览
2

由于其相对速度和预处理能力,我更喜欢在拟合模型时使用插入符号 . 但是,我对如何做出预测感到有些困惑 . 当比较直接从列车对象做出的预测和从提取的最终模型做出的预测时,我看到的数字非常不同 . 来自火车对象的预测似乎更准确 .

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

我想从护林员模型中的每个树中提取预测,这是我无法在插入符号中进行的 . 有什么想法吗?

1 回答

  • 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
    

相关问题