最近我一直在使用tidymodels运行模型,并选择最符合某个目标函数的参数。例如,使用虚拟回归对mtcars数据进行分析(以这个问题底部答案中的回归示例为例)。
library(tidymodels)
library(tidyverse)
#some regression model
cars_recipe <- recipe(mpg ~ disp + drat, data = mtcars)
wf <- workflow() %>%
add_recipe(cars_recipe)
(与这篇博客文章中的语法大致相似,仅用于比较;为了在本例中保持清晰,我不会执行诸如分离测试/训练等多个步骤)
然后,我可以运行多个模型并获取这些模型的指标(在这种情况下,是一些弹性网络的各种惩罚值)
#run over a parameter space and find metrics as an objective
mtcars_bootstrap <- bootstraps(mtcars)
tune_spec <- linear_reg(penalty = tune(), mixture = 1) %>%
set_engine("glmnet")
lambda_grid <- grid_regular(penalty(), levels = 50)
lasso_grid <- tune_grid(
wf %>% add_model(tune_spec),
resamples = mtcars_bootstrap,
grid = lambda_grid
)
但是假设我有充分的理由认为存在两个不同的模型,可能最能捕捉汽车油耗等因素的影响,因此我创建了第二个模型作为一种配方。
cars_recipe2 <- recipe(mpg ~ I(disp + drat), data = mtcars)
现在,我也可以使用lapply或purrr函数族将此配方通过上述管道运行,但是,我想知道是否有一种内置方式可以通过tidymodels运行多个配方?尽管这似乎应该是可能的,但我认为这可能会被设计为防止p-hacking。