1

我想应用随机森林方法来预测患者在医院的等待时间。我严格按照https://www.tidymodels.org/start/case-study/上的说明调整我的模型。获得最佳模型后,我last_rf_workflow按照上面链接中的说明创建对象。

last_rf_workflow <- 
  Data_rf_wflow %>% 
  update_model(last_rf_mod)

然后,我使用下面的代码来拟合最终模型:

set.seed(345)
last_rf_fit <- 
  last_rf_workflow %>% 
  last_fit(data_split)

如此处所述last_fit()函数在整个训练集上拟合模型并计算测试集的预测值。这些预测可以在 访问View(last_rf_fit[[5]][[1]])

但是,当我将模型拟合到整个训练集然后使用该predict()函数时,我得到的预测略有不同:

set.seed(345)
last_rf_fit_2 <- 
  last_rf_workflow %>% 
  fit(training(data_split))

predict(last_rf_fit_2, testing(data_split))

我想知道是否有人可以帮助我理解为什么这两个预测不同。谢谢。

4

1 回答 1

3

我认为这是因为ranger需要自己单独的种子。我用过set_engine("ranger", seed = 123)
我在 Julia 的可重现代码的基础上重现了输出,这两个预测是相同的。

library(tidymodels)

set.seed(123)
tr_te_split <- initial_split(mtcars)

rf_spec <- rand_forest() %>%
  set_mode("regression") %>%
  set_engine("ranger", seed = 123)

rf_wf <- workflow() %>%
  add_model(rf_spec) %>%
  add_formula(mpg ~ .)

set.seed(345)
last_rf_fit <- last_fit(rf_wf, split = tr_te_split)
collect_predictions(last_rf_fit)
#> # A tibble: 8 x 4
#>   id               .pred  .row   mpg
#>   <chr>            <dbl> <int> <dbl>
#> 1 train/test split  24.8     3  22.8
#> 2 train/test split  18.8    10  19.2
#> 3 train/test split  16.5    14  15.2
#> 4 train/test split  13.6    15  10.4
#> 5 train/test split  28.2    18  32.4
#> 6 train/test split  29.2    19  30.4
#> 7 train/test split  17.3    22  15.5
#> 8 train/test split  15.3    31  15


set.seed(345)
last_rf_fit_2 <- fit(rf_wf, training(tr_te_split))
predict(last_rf_fit_2, testing(tr_te_split))
#> # A tibble: 8 x 1
#>   .pred
#>   <dbl>
#> 1  24.8
#> 2  18.8
#> 3  16.5
#> 4  13.6
#> 5  28.2
#> 6  29.2
#> 7  17.3
#> 8  15.3

reprex 包(v0.3.0)于 2020 年 8 月 19 日创建

于 2020-08-19T06:33:34.787 回答