当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。