通常,数据从业者需要考虑手头任务的大量可能的建模方法,特别是对于新数据集和/或当对哪种建模策略最有效知之甚少时。工作流集提供了一个富有表现力的接口,用于在这种情况下研究多个模型或特征工程策略。
参数
- 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。