當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R workflowsets workflow_set 從預處理和模型對象生成一組工作流對象


通常,數據從業者需要考慮手頭任務的大量可能的建模方法,特別是對於新數據集和/或當對哪種建模策略最有效知之甚少時。工作流集提供了一個富有表現力的接口,用於在這種情況下研究多個模型或特征工程策略。

用法

workflow_set(preproc, models, cross = TRUE, case_weights = NULL)

參數

preproc

包含預處理對象的列表(最好命名):公式、配方或 workflows::workflow_variables()

models

parsnip 模型規範的列表(最好命名)。

cross

邏輯:是否應該使用預處理器和模型的所有組合來創建工作流程?如果是FALSE,則preprocmodels的長度應該相等。

case_weights

一個不帶引號的列名稱,指定模型的案例權重。這必須是分類案例權重列,由 hardhat::is_case_weights() 確定。有關更多信息,請參閱下麵的"Case weights"部分。

帶有額外類'workflow_set'的小標題。新集包括四列(但可以添加其他列):

  • wflow_id 包含預處理器/工作流組合的字符串。這些可以更改,但必須是唯一的。

  • info 是一個列表列,其中的標題包含更具體的信息,包括使用 comment_add() 添加的任何注釋。該 tibble 還包含工作流對象(可以使用 extract_workflow() 輕鬆檢索)。

  • option 是一個列表列,其中包含從 tune 包傳遞給函數的可選參數列表。它們可以通過 option_add() 手動添加,也可以在選項傳遞給 workflow_map() 時自動添加。

  • result 是一個列表列,其中包含使用 workflow_map() 時生成的任何對象。

細節

可以與模型對象組合的預處理器可以是以下一項或多項:

由於 preproc 是命名列表列,因此可以在該參數中使用這些的任意組合(即,preproc 可以是混合類型)。

注意

該軟件包提供兩個預生成的工作流程集 two_class_setchi_features_set ,以及適合 two_class_reschi_features_res 的相關模型集。

two_class_* 對象基於使用 modeldata 包中的 two_class_dat 數據的二元分類問題。這六個模型利用裸公式或基本配方,利用 recipes::step_YeoJohnson() 作為預處理器,以及決策樹、邏輯回歸或 MARS 模型規範。有關源代碼,請參閱?two_class_set

chi_features_* 對象基於使用 modeldata 包中的 Chicago 數據的回歸問題。這三個模型均采用線性回歸模型規範,具有不同複雜性的三種不同配方。這些對象旨在近似 Kuhn 和 Johnson (2019) 第 1.3 節中構建的模型序列。有關源代碼,請參閱?chi_features_set

箱重

case_weights 參數可以作為單個不帶引號的列名稱傳遞,標識給出模型案例權重的數據列。對於工作流集中使用支持案例權重的引擎的每個工作流程,案例權重將添加 workflows::add_case_weights() 。如果任何工作流指定不支持案例權重的引擎,workflow_set() 將發出警告,並忽略這些工作流程的案例權重參數,但不會失敗。

?parsnip::case_weights 中閱讀有關 tidymodel 中案例權重的更多信息。

例子

library(workflowsets)
library(workflows)
library(modeldata)
library(recipes)
library(parsnip)
library(dplyr)
library(rsample)
library(tune)
library(yardstick)

# ------------------------------------------------------------------------------

data(cells)
cells <- cells %>% dplyr::select(-case)

set.seed(1)
val_set <- validation_split(cells)

# ------------------------------------------------------------------------------

basic_recipe <-
  recipe(class ~ ., data = cells) %>%
  step_YeoJohnson(all_predictors()) %>%
  step_normalize(all_predictors())

pca_recipe <-
  basic_recipe %>%
  step_pca(all_predictors(), num_comp = tune())

ss_recipe <-
  basic_recipe %>%
  step_spatialsign(all_predictors())

# ------------------------------------------------------------------------------

knn_mod <-
  nearest_neighbor(neighbors = tune(), weight_func = tune()) %>%
  set_engine("kknn") %>%
  set_mode("classification")

lr_mod <-
  logistic_reg() %>%
  set_engine("glm")

# ------------------------------------------------------------------------------

preproc <- list(none = basic_recipe, pca = pca_recipe, sp_sign = ss_recipe)
models <- list(knn = knn_mod, logistic = lr_mod)

cell_set <- workflow_set(preproc, models, cross = TRUE)
cell_set
#> # A workflow set/tibble: 6 × 4
#>   wflow_id         info             option    result    
#>   <chr>            <list>           <list>    <list>    
#> 1 none_knn         <tibble [1 × 4]> <opts[0]> <list [0]>
#> 2 none_logistic    <tibble [1 × 4]> <opts[0]> <list [0]>
#> 3 pca_knn          <tibble [1 × 4]> <opts[0]> <list [0]>
#> 4 pca_logistic     <tibble [1 × 4]> <opts[0]> <list [0]>
#> 5 sp_sign_knn      <tibble [1 × 4]> <opts[0]> <list [0]>
#> 6 sp_sign_logistic <tibble [1 × 4]> <opts[0]> <list [0]>

# ------------------------------------------------------------------------------
# Using variables and formulas

# Select predictors by their names
channels <- paste0("ch_", 1:4)
preproc <- purrr::map(channels, ~ workflow_variables(class, c(contains(!!.x))))
names(preproc) <- channels
preproc$everything <- class ~ .
preproc
#> $ch_1
#> $outcomes
#> <quosure>
#> expr: ^class
#> env:  0x55b7be2b4d30
#> 
#> $predictors
#> <quosure>
#> expr: ^c(contains("ch_1"))
#> env:  0x55b7be2b4d30
#> 
#> attr(,"class")
#> [1] "workflow_variables"
#> 
#> $ch_2
#> $outcomes
#> <quosure>
#> expr: ^class
#> env:  0x55b7be2a8908
#> 
#> $predictors
#> <quosure>
#> expr: ^c(contains("ch_2"))
#> env:  0x55b7be2a8908
#> 
#> attr(,"class")
#> [1] "workflow_variables"
#> 
#> $ch_3
#> $outcomes
#> <quosure>
#> expr: ^class
#> env:  0x55b7be2a3ac0
#> 
#> $predictors
#> <quosure>
#> expr: ^c(contains("ch_3"))
#> env:  0x55b7be2a3ac0
#> 
#> attr(,"class")
#> [1] "workflow_variables"
#> 
#> $ch_4
#> $outcomes
#> <quosure>
#> expr: ^class
#> env:  0x55b7be298e10
#> 
#> $predictors
#> <quosure>
#> expr: ^c(contains("ch_4"))
#> env:  0x55b7be298e10
#> 
#> attr(,"class")
#> [1] "workflow_variables"
#> 
#> $everything
#> class ~ .
#> <environment: 0x55b7bd233530>
#> 

cell_set_by_group <- workflow_set(preproc, models["logistic"])
cell_set_by_group
#> # A workflow set/tibble: 5 × 4
#>   wflow_id            info             option    result    
#>   <chr>               <list>           <list>    <list>    
#> 1 ch_1_logistic       <tibble [1 × 4]> <opts[0]> <list [0]>
#> 2 ch_2_logistic       <tibble [1 × 4]> <opts[0]> <list [0]>
#> 3 ch_3_logistic       <tibble [1 × 4]> <opts[0]> <list [0]>
#> 4 ch_4_logistic       <tibble [1 × 4]> <opts[0]> <list [0]>
#> 5 everything_logistic <tibble [1 × 4]> <opts[0]> <list [0]>
源代碼:R/workflow_set.R

相關用法


注:本文由純淨天空篩選整理自Max Kuhn等大神的英文原創作品 Generate a set of workflow objects from preprocessing and model objects。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。