通常,數據從業者需要考慮手頭任務的大量可能的建模方法,特別是對於新數據集和/或當對哪種建模策略最有效知之甚少時。工作流集提供了一個富有表現力的接口,用於在這種情況下研究多個模型或特征工程策略。
參數
- preproc
-
包含預處理對象的列表(最好命名):公式、配方或
workflows::workflow_variables()
。 - models
-
parsnip
模型規範的列表(最好命名)。 - cross
-
邏輯:是否應該使用預處理器和模型的所有組合來創建工作流程?如果是
FALSE
,則preproc
和models
的長度應該相等。 - 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()
時生成的任何對象。
細節
可以與模型對象組合的預處理器可以是以下一項或多項:
-
傳統的 R 公式。
-
通過
recipes::recipe()
的配方定義 (un-prepared)。 -
由
workflows::workflow_variables()
創建的選擇器對象。
由於 preproc
是命名列表列,因此可以在該參數中使用這些的任意組合(即,preproc
可以是混合類型)。
注意
該軟件包提供兩個預生成的工作流程集 two_class_set
和 chi_features_set
,以及適合 two_class_res
和 chi_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 workflowsets workflow_map 處理一係列工作流程
- R workflowsets extract_workflow_set_result 提取工作流集的元素
- R workflowsets comment_add 為工作流程添加注釋和評論
- R workflowsets option_add 添加和編輯工作流程集中保存的選項
- R workflowsets fit_best.workflow_set 將模型擬合到數值最優配置
- R workflowsets leave_var_out_formulas 創建沒有每個預測變量的公式
- R workflowsets collect_metrics.workflow_set 獲取並格式化通過調整工作流集函數生成的結果
- R workflowsets as_workflow_set 將現有對象轉換為工作流集
- R workflowsets option_list 製作一個分類的選項列表
- R workflowsets rank_results 按指標對結果進行排名
- R workflowsets pull_workflow_set_result 從工作流集中提取元素
- R workflowsets autoplot.workflow_set 繪製工作流程集的結果
- R workflowsets update_workflow_model 更新工作流集中的工作流組件
- R workflows add_model 將模型添加到工作流程
- R workflows workflow 創建工作流程
- R workflows extract-workflow 提取工作流程的元素
- R workflows add_variables 將變量添加到工作流程
- R workflows add_formula 將公式術語添加到工作流程
- R workflows predict-workflow 從工作流程進行預測
- R workflows augment.workflow 通過預測增強數據
- R workflows add_recipe 將配方添加到工作流程
- R workflows glance.workflow 工作流程模型一覽
- R workflows is_trained_workflow 確定工作流程是否經過訓練
- R workflows fit-workflow 適合工作流對象
- R workflows add_case_weights 將案例權重添加到工作流程
注:本文由純淨天空篩選整理自Max Kuhn等大神的英文原創作品 Generate a set of workflow objects from preprocessing and model objects。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。