我如何在 tidymodels 中将蓝图添加到 workflow_set

How do i add blueprint into workflow_set in tidymodels

我尝试按照

中的示例进行操作

Link 1 - 稀疏矩阵 https://www.tidyverse.org/blog/2020/11/tidymodels-sparse-support/

Link 2 - Workflow_sets https://www.tmwr.org/workflow-sets.html

我在将蓝图纳入工作流集中时遇到了问题。

在 workflow_set 中定义的示例中 link 2

no_pre_proc <- 
   workflow_set(
      preproc = list(simple = model_vars), 
      models = list(MARS = mars_spec, CART = cart_spec, CART_bagged = bag_cart_spec,
                    RF = rf_spec, boosting = xgb_spec, Cubist = cubist_spec)
   )

以及我们在 link 1

中将蓝图添加到工作流程中的方式
wf_sparse <- 
  workflow() %>%
  add_recipe(text_rec, blueprint = sparse_bp) %>%
  add_model(lasso_spec)
  
wf_default <- 
  workflow() %>%
  add_recipe(text_rec) %>%
  add_model(lasso_spec)

在上面的 workflow_set 中,在哪里以及如何添加“blueprint = sparse_bp”选项?

我的尝试是

no_pre_proc <- 
   workflow_set(
      preproc = list(simple = model_vars), 
      models = list(MARS = mars_spec, CART = cart_spec, CART_bagged = bag_cart_spec,
                    RF = rf_spec, boosting = xgb_spec, Cubist = cubist_spec)) %>% 
  option_add(update_blueprint(blueprint = sparse_bp))

运行 赛车曲调给我这个错误

Error: Problem with `mutate()` column `option`.
i `option = purrr::map(option, append_options, dots)`.
x All options should be named.
Run `rlang::last_error()` to see where the error occurred

<error/rlang_error>
There were 9 workflows that had no results.
Backtrace:
 1. ggplot2::autoplot(...)
 2. workflowsets:::autoplot.workflow_set(...)
 3. workflowsets:::rank_plot(...)
 4. workflowsets:::pick_metric(object, rank_metric, metric)
 6. workflowsets:::collect_metrics.workflow_set(x)
 7. workflowsets:::check_incompete(x, fail = TRUE)
 8. workflowsets:::halt(msg)
Run `rlang::last_trace()` to see the full context.
> rlang::last_trace()
<error/rlang_error>
There were 9 workflows that had no results.
Backtrace:
    x
 1. +-ggplot2::autoplot(...)
 2. \-workflowsets:::autoplot.workflow_set(...)
 3.   \-workflowsets:::rank_plot(...)
 4.     \-workflowsets:::pick_metric(object, rank_metric, metric)
 5.       +-tune::collect_metrics(x)
 6.       \-workflowsets:::collect_metrics.workflow_set(x)
 7.         \-workflowsets:::check_incompete(x, fail = TRUE)
 8.           \-workflowsets:::halt(msg)
> 

谢谢,

感谢您提出这个问题;我们现在肯定不能很好地支持这个用例(将非默认参数传递给配方或模型)。我们已经打开了 an issue here,您可以在其中跟踪我们的工作。

与此同时,您可以通过在您感兴趣的工作流程上手动使用 update_recipe() 来尝试一些棘手的解决方法:

library(tidymodels)
#> Registered S3 method overwritten by 'tune':
#>   method                   from   
#>   required_pkgs.model_spec parsnip

data(parabolic)
set.seed(1)
split <- initial_split(parabolic)
train_set <- training(split)
test_set <- testing(split)

glmnet_spec <- 
  logistic_reg(penalty = 0.1, mixture = 0) %>%
  set_engine("glmnet")

rec <-
  recipe(class ~ ., data = train_set) %>%
  step_YeoJohnson(all_numeric_predictors())

sparse_bp <- hardhat::default_recipe_blueprint(composition = "dgCMatrix")

wfs_orig <-
  workflow_set(
    preproc = list(yj = rec, 
                   norm = rec %>% step_normalize(all_numeric_predictors())),
    models = list(regularized = glmnet_spec)
  ) 

new_wf <- 
  wfs_orig %>% 
  extract_workflow("yj_regularized") %>% 
  update_recipe(rec, blueprint = sparse_bp)

reprex package (v2.0.1)

于 2021-12-09 创建

然后(我知道这现在感觉很老套)手动取下这个 new_wf 并将其插入 wfs_orig$info[[1]]$workflow 插槽以替换那里的内容。