代码之家  ›  专栏  ›  技术社区  ›  B. Sharp

插入符号使用插入符号序列对象返回的预测与使用提取的最终模型返回的预测不同

  •  2
  • B. Sharp  · 技术社区  · 8 年前

    我更喜欢在拟合模型时使用插入符号,因为它的相对速度和预处理能力。然而,我对它如何做出预测有点困惑。当比较直接从火车对象做出的预测和从提取的最终模型做出的预测时,我看到了非常不同的数字。列车对象的预测似乎更准确。

    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
    

    我肯定这与我如何预处理train对象中的数据有关,但即使我预处理测试数据并使用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
    

    我想从ranger模型中的每棵树中提取预测,这在插入符号中是做不到的。有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   missuse    8 年前

    为了从最终模型中获得与插入符号相同的预测 train 您应该以同样的方式预处理数据。使用您的示例 set.seed(1) :

    插入符号预测:

    prediction1 <- predict(fitRanger,
                           newdata = predict.data)
    

    ranger预测最终模型。预测采用插入符号预处理。数据

    prediction2 <- predict(fitRanger$finalModel,
                           data = predict(fitRanger$preProcess,
                                          predict.data))$prediction
    
    all.equal(prediction1,
              prediction2)
    #output
    TRUE