微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 tidymodels

如何解决使用 tidymodels

我最近一直在使用 tidymodels 来运行模型并选择最能满足某些目标函数的参数。例如对 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 中的语法进行比较;在本示例中,为了清晰起见,我没有执行诸如拆分测试/训练之类的各种步骤)

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

#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 年 2 月 9 日创建

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。