gpt4 book ai didi

使用 tidymodels 运行多个回归模型

转载 作者:行者123 更新时间:2023-12-04 11:35:37 25 4
gpt4 key购买 nike

我最近一直在使用 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)

创建于 2021-02-09 由 reprex package (v1.0.0)
这是在进行中,所以如果你有很高的稳定性需求,我会等几个月才能使用它。不过,我们对它如何能够满足人们的需求感到兴奋!

关于使用 tidymodels 运行多个回归模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66117523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com