运行 使用 tidymodels 的多元回归模型

running multiple regression models using tidymodels

我最近一直在使用 tidymodels 运行 模型和 select 最能满足某些 objective 功能的参数。例如,对 mtcars 数据 (using the regression examples from the bottom answer of this question as an example)

使用假设回归
library(tidymodels)
library(tidyverse)

#some regression model
cars_recipe <- recipe(mpg ~ disp + drat, data = mtcars)

wf <- workflow() %>%
  add_recipe(cars_recipe)

(大致使用 this blog post 中的语法进行比较;为了清楚起见,在此示例中我没有执行拆分 test/train 等各种步骤)

然后我可以 运行 许多模型并从这些模型中获取指标(在这种情况下是对某些弹性网络的各种惩罚)因此

#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
)

但可以说我有充分的理由认为有两个独立的模型可以最好地捕捉对汽车(例如)mpg 的影响,所以我创建了第二个模型作为配方

cars_recipe2 <- recipe(mpg ~ I(disp + drat), data = mtcars)

现在我也可以 运行 使用 lapply 或 purrr 系列函数通过上述管道来 运行 这个食谱,但是,我想知道是否有一些内置的方法 运行 通过 tidymodels 的多个食谱?

似乎应该有,虽然我也认为它可能被设计排除以防止 p-hacking


我们正在开发一个名为 workflowsets 的实验包来做到这一点。如果您准备尝试一个新的、仍在开发中的软件包,您现在可以从 GitHub 安装它:

devtools::install_github("tidymodels/workflowsets")

然后你可以这样设置分析:

library(tidymodels)
library(workflowsets)

mtcars_boot <- bootstraps(mtcars)

rec1 <- recipe(mpg ~ disp + drat, data = mtcars)
rec2 <- recipe(mpg ~ disp + drat, data = mtcars) %>%
  step_log(disp) %>%
  step_normalize(disp, drat)

lasso_spec <- linear_reg(penalty = tune(), mixture = 1) %>%
  set_engine("glmnet")

# put it all together in a "workflow set"
car_models <- 
  workflow_set(
    preproc = list(simple = rec1, preproc = rec2),
    models = list(lasso = lasso_spec),
    cross = TRUE
  )
car_models
#> # A workflow set/tibble: 2 x 4
#>   wflow_id      info             option    result    
#>   <chr>         <list>           <list>    <list>    
#> 1 simple_lasso  <tibble [1 × 4]> <opts[0]> <list [0]>
#> 2 preproc_lasso <tibble [1 × 4]> <opts[0]> <list [0]>

现在您已经设置了工作流程,您可以使用 tune_grid() 和您想要使用的其他参数(例如重采样和网格)“映射”它。

lambda_grid <- grid_regular(penalty(range = c(-2, 0)), levels = 10)

car_res <- car_models %>%
  workflow_map("tune_grid", resamples = mtcars_boot, 
               grid = lambda_grid, verbose = TRUE)
#> i 1 of 2 tuning:     simple_lasso
#> ✓ 1 of 2 tuning:     simple_lasso (7.7s)
#> i 2 of 2 tuning:     preproc_lasso
#> ✓ 2 of 2 tuning:     preproc_lasso (8.4s)

## some autoplot methods are available
autoplot(car_res)

reprex package (v1.0.0)

于 2021-02-09 创建

这是在进行中,所以如果您对稳定性有很高的需求,我会等几个月再使用它。不过,我们很高兴它能够满足人们的需求!