Настройка рецепта в наборе рабочих процессов с настраиваемым диапазоном (или значением)

#r #tidyverse #tidymodels #r-recipes

Вопрос:

Я пытаюсь использовать функцию workflow_set() в tidymodels для оценки пакета моделей. Я понимаю, что можно изменить некоторую спецификацию модели, чтобы изменить диапазон поиска, например, учитывая эту спецификацию:

 spec_lin <- linear_reg( penalty = tune(), 
                    mixture = tune()  ) %>%
set_engine('glmnet')
 

Я могу изменить диапазон, используя:

 rec_base <- recipe( price ~ feat_1) %>% 
  step_novel(feat_1) %>% 
  step_other(feat_1,threshold=.2 ) %>%
  step_dummy(feat_1)

rec_adv_param <- rec_base %>% 
  parameters() %>% 
  update ( mixture = mixture(c(0.1,0.01)) )
 

Я пытаюсь сделать то же самое, но с параметрами в рецепте. Например:

 rec_tuned <- recipe( price ~ feat_1) %>% 
  step_novel(feat_1) %>% 
  step_other(feat_1,threshold=tune() ) %>%
  step_dummy(feat_1)
 

с последующим

 rec_adv_param <- rec_tuned %>% 
  parameters() %>% 
  update ( threshold = threshold(c(0.1,0.2)) )
 

Однако, когда я пытаюсь использовать его в определении workflow_set (), если я использую что-то вроде

 wf_set  <- workflow_set(recipes, models, cross = TRUE ) 
  option_add(param_info = rec_adv_param, id = "rec_tuned_spec_lin") 
 

Финал «wf_set» потерял свои первоначальные параметры настройки, которые были изменены с помощью

 threshold = threshold(c(0.1,0.2)
 

Есть ли способ добавить спецификацию параметров для рецепта во все модели workflow_set?

Спасибо

Ответ №1:

Вы можете добавить параметры для рецепта через option_add() , либо для одного рабочего id процесса, либо для всех рабочих процессов, если вы уйдете id = NULL . Когда вы перейдете к настройке или подгонке данных с повторной выборкой, будут использоваться эти параметры.

Например, если мы хотим попробовать от 0 до 20 компонентов PCA (вместо стандартных):

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

time_val_split <-
   sliding_period(
      Chicago,
      date,
      "month",
      lookback = 38,
      assess_stop = 1
   )

## notice that there are no options; defaults will be used
chi_features_set
#> # A workflow set/tibble: 3 × 4
#>   wflow_id         info             option    result    
#>   <chr>            <list>           <list>    <list>    
#> 1 date_lm          <tibble [1 × 4]> <opts[0]> <list [0]>
#> 2 plus_holidays_lm <tibble [1 × 4]> <opts[0]> <list [0]>
#> 3 plus_pca_lm      <tibble [1 × 4]> <opts[0]> <list [0]>

## make new params
pca_param <-
   parameters(num_comp()) %>%
   update(num_comp = num_comp(c(0, 20)))

## add new params to workflowset like this:
chi_features_set %>%
   option_add(param_info = pca_param, id = "plus_pca_lm")
#> # A workflow set/tibble: 3 × 4
#>   wflow_id         info             option    result    
#>   <chr>            <list>           <list>    <list>    
#> 1 date_lm          <tibble [1 × 4]> <opts[0]> <list [0]>
#> 2 plus_holidays_lm <tibble [1 × 4]> <opts[0]> <list [0]>
#> 3 plus_pca_lm      <tibble [1 × 4]> <opts[1]> <list [0]>

## now these new parameters can be used by `workflow_map()`:
chi_features_set %>%
   option_add(param_info = pca_param, id = "plus_pca_lm") %>%
   workflow_map(resamples = time_val_split, grid = 21, seed = 1)

#> # A workflow set/tibble: 3 × 4
#>   wflow_id         info             option    result   
#>   <chr>            <list>           <list>    <list>   
#> 1 date_lm          <tibble [1 × 4]> <opts[2]> <rsmp[ ]>
#> 2 plus_holidays_lm <tibble [1 × 4]> <opts[2]> <rsmp[ ]>
#> 3 plus_pca_lm      <tibble [1 × 4]> <opts[3]> <tune[ ]>
 

Создано 2021-07-30 пакетом reprex (v2.0.0)

Комментарии:

1. Спасибо, Юлия, вы всегда оказываете очень ценную помощь!