最近我正在学习使用 mlr3 包进行并行化。作为 mlr3 书籍 ( https://mlr3book.mlr-org.com/technical.html ) 和教程 ( https://www.youtube.com/watch?v=T43hO2o_nZw&t=1s ) 的介绍,mlr3 使用未来的后端用于并行化。我使用以下代码运行了一个简单的测试:
# load the packages
library(future)
library(future.apply)
library(mlr3)
# set the task
task_train <- TaskClassif$new(id = "survey_train", backend = train, target = "r_yn", positive = "yes")
# set the learner
learner_ranger <- mlr_learners$get("classif.ranger")
# set the cv
cv_5 <- rsmp("cv", folds = 5)
# run the resampling in parallelization
plan(multisession, workers = 5)
task_train_cv_5_par <- resample(task = task_train, learner = learner_ranger, resampling = cv_5)
plan(sequential)
task_train_cv_5_par$aggregate(msr("classif.auc"))
AUC 每次都会改变,我知道这是因为我没有为并行化设置随机种子。但是我发现了很多关于未来包的教程,使用 future 获得可重现结果的方法是使用future.apply包中的 future_lapply 并设置 future.seed = TRUE。另一种方法是使用 %dorng% 或 registerDoRNG() 为 foreach 循环设置未来的后端。
我的问题是如何在不使用 future_lapply 或 foreach的情况下在 mlr3 中获得可重现的重采样结果?我想可能有一种简单的方法可以做到这一点。非常感谢!