per*_*one 2 r machine-learning mlr3
假设我有一台 32 个核心的机器,并且希望尽可能高效地执行 5 个外折叠和 3 个内折叠的嵌套 CV。
在外层,我对两个或多个学习器进行基准测试,在内层,我为一个或 nk 个学习器调整超参数。
如何设置batch_size和future::plan()?
term_eval 如何取决于批量大小?
这明智吗?我的直觉是更好地并行运行内部循环。但我不确定 term_evals 和 batch_size。
lrn1 <- auto_tuner(
method = "random_search",
learner = lrn1,
resampling = rsmp("cv", folds = 3),
measure = msr("classif.auc"),
term_evals = 100,
batch_size = 10,
store_models = TRUE
)
design = benchmark_grid(task = task, learner = c(lrn1, lrn2), resampling = rsmp("cv", folds = 5))
# Runs the inner loop in parallel and the outer loop sequentially
future::plan(list("sequential", "multisession"))
bmr = benchmark(design, store_models = TRUE)
Run Code Online (Sandbox Code Playgroud)
小智 5
如果使用rsmp("cv", folds = 3)并设置batch_size = 10,则一次使用 30 个核心(3 折叠 x 10 配置)。
term_eval 如何取决于批量大小?
term_eval不依赖于batch_size.
batch_size指定在检查终止符之前评估多少个配置。在您的示例中,在 10 次配置后检查终止符。但您还剩下 90 个配置,因此调整仍在继续。终结器在 10 次配置后再次检查,依此类推。当评估 100 个配置时,终止器停止调整。它还batch_size确定并行评估多少个配置。
我的直觉是更好地并行运行内部循环。
是的,并行运行内部循环,即 keep future::plan(list("sequential", "multisession"))。