-
add_formula()
通过使用公式指定模型的项。 -
remove_formula()
删除公式以及使用公式进行预处理后可能创建的任何下游对象,例如术语。此外,如果模型已经拟合,则拟合将被删除。 -
update_formula()
首先删除公式,然后用新公式替换以前的公式。任何已经根据此公式拟合的模型都需要重新拟合。
用法
add_formula(x, formula, ..., blueprint = NULL)
remove_formula(x)
update_formula(x, formula, ..., blueprint = NULL)
参数
- x
-
工作流程
- formula
-
指定模型项的公式。建议不要在公式中进行预处理,而是在需要时使用配方。
- ...
-
不曾用过。
- blueprint
-
用于微调预处理的安全帽蓝图。
如果使用
NULL
、hardhat::default_formula_blueprint()
并传递与工作流中存在的模型最相符的参数。请注意,此处完成的预处理与底层模型可能完成的预处理是分开的。例如,如果指定了
indicators = "none"
的蓝图,hardhat 不会创建虚拟变量,但如果底层模型需要内部使用stats::model.matrix()
的公式接口,则模型仍会将因子扩展为虚拟变量。
细节
要适应工作流程,必须指定 add_formula()
、 add_recipe()
或 add_variables()
之一。
配方处理
请注意,对于不同的模型,add_formula()
的公式可能会以不同的方式处理,具体取决于所使用的防风草模型。例如,使用 Ranger 拟合的随机森林模型不会将任何因子预测变量转换为二元指示变量。这与 ranger::ranger()
的做法一致,但与 stats::model.matrix()
的做法不一致。
防风草模型的文档提供了有关如何为模型编码公式中给出的数据(如果它们与标准 model.matrix()
方法不同)的详细信息。我们的目标是与底层模型包的工作方式保持一致。
这个公式是如何使用的呢?
为了进行演示,下面的示例使用 lm()
来拟合模型。给 add_formula()
的公式用于创建模型矩阵,这就是通过 body_mass_g ~ .
的简单公式传递给 lm()
的内容:
library(parsnip)
library(workflows)
library(magrittr)
library(modeldata)
library(hardhat)
data(penguins)
lm_mod <- linear_reg() %>%
set_engine("lm")
lm_wflow <- workflow() %>%
add_model(lm_mod)
pre_encoded <- lm_wflow %>%
add_formula(body_mass_g ~ species + island + bill_depth_mm) %>%
fit(data = penguins)
pre_encoded_parsnip_fit <- pre_encoded %>%
extract_fit_parsnip()
pre_encoded_fit <- pre_encoded_parsnip_fit$fit
# The `lm()` formula is *not* the same as the `add_formula()` formula:
pre_encoded_fit
##
## Call:
## stats::lm(formula = ..y ~ ., data = data)
##
## Coefficients:
## (Intercept) speciesChinstrap speciesGentoo
## -1009.943 1.328 2236.865
## islandDream islandTorgersen bill_depth_mm
## 9.221 -18.433 256.913
这可能会影响结果的分析方式。例如,为了获得顺序假设检验,需要测试每个单独的项:
anova(pre_encoded_fit)
## Analysis of Variance Table
##
## Response: ..y
## Df Sum Sq Mean Sq F value Pr(>F)
## speciesChinstrap 1 18642821 18642821 141.1482 <2e-16 ***
## speciesGentoo 1 128221393 128221393 970.7875 <2e-16 ***
## islandDream 1 13399 13399 0.1014 0.7503
## islandTorgersen 1 255 255 0.0019 0.9650
## bill_depth_mm 1 28051023 28051023 212.3794 <2e-16 ***
## Residuals 336 44378805 132080
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
覆盖默认编码
用户可以使用安全帽蓝图覆盖 model-specific 编码。蓝图可以指定因子的编码方式以及是否包含截距。例如,如果您使用公式并希望将数据不受影响地传递到模型:
minimal <- default_formula_blueprint(indicators = "none", intercept = FALSE)
un_encoded <- lm_wflow %>%
add_formula(
body_mass_g ~ species + island + bill_depth_mm,
blueprint = minimal
) %>%
fit(data = penguins)
un_encoded_parsnip_fit <- un_encoded %>%
extract_fit_parsnip()
un_encoded_fit <- un_encoded_parsnip_fit$fit
un_encoded_fit
##
## Call:
## stats::lm(formula = ..y ~ ., data = data)
##
## Coefficients:
## (Intercept) bill_depth_mm speciesChinstrap
## -1009.943 256.913 1.328
## speciesGentoo islandDream islandTorgersen
## 2236.865 9.221 -18.433
虽然这看起来相同,但原始列被赋予lm()
,并且该函数创建了虚拟变量。因此,顺序方差分析测试参数组以获得 column-level p 值:
anova(un_encoded_fit)
## Analysis of Variance Table
##
## Response: ..y
## Df Sum Sq Mean Sq F value Pr(>F)
## bill_depth_mm 1 48840779 48840779 369.782 <2e-16 ***
## species 2 126067249 63033624 477.239 <2e-16 ***
## island 2 20864 10432 0.079 0.9241
## Residuals 336 44378805 132080
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
覆盖默认模型公式
此外,传递给底层模型的公式也可以定制。在这种情况下,可以使用add_model()
的formula
参数。为了进行演示,将使用样条函数来表示钞票深度:
library(splines)
custom_formula <- workflow() %>%
add_model(
lm_mod,
formula = body_mass_g ~ species + island + ns(bill_depth_mm, 3)
) %>%
add_formula(
body_mass_g ~ species + island + bill_depth_mm,
blueprint = minimal
) %>%
fit(data = penguins)
custom_parsnip_fit <- custom_formula %>%
extract_fit_parsnip()
custom_fit <- custom_parsnip_fit$fit
custom_fit
##
## Call:
## stats::lm(formula = body_mass_g ~ species + island + ns(bill_depth_mm,
## 3), data = data)
##
## Coefficients:
## (Intercept) speciesChinstrap speciesGentoo
## 1959.090 8.534 2352.137
## islandDream islandTorgersen ns(bill_depth_mm, 3)1
## 2.425 -12.002 1476.386
## ns(bill_depth_mm, 3)2 ns(bill_depth_mm, 3)3
## 3187.839 1686.996
改变公式
最后,当公式被更新或从拟合工作流程中删除时,相应的模型拟合也会被删除。
custom_formula_no_fit <- update_formula(custom_formula, body_mass_g ~ species)
try(extract_fit_parsnip(custom_formula_no_fit))
## Error in extract_fit_parsnip(custom_formula_no_fit) :
## Can't extract a model fit from an untrained workflow.
## i Do you need to call `fit()`?
例子
workflow <- workflow()
workflow <- add_formula(workflow, mpg ~ cyl)
workflow
#> ══ Workflow ══════════════════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: None
#>
#> ── Preprocessor ──────────────────────────────────────────────────────────
#> mpg ~ cyl
remove_formula(workflow)
#> ══ Workflow ══════════════════════════════════════════════════════════════
#> Preprocessor: None
#> Model: None
update_formula(workflow, mpg ~ disp)
#> ══ Workflow ══════════════════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: None
#>
#> ── Preprocessor ──────────────────────────────────────────────────────────
#> mpg ~ disp
相关用法
- R workflows add_model 将模型添加到工作流程
- R workflows add_variables 将变量添加到工作流程
- R workflows add_recipe 将配方添加到工作流程
- R workflows add_case_weights 将案例权重添加到工作流程
- R workflows augment.workflow 通过预测增强数据
- R workflows workflow 创建工作流程
- R workflows extract-workflow 提取工作流程的元素
- R workflows predict-workflow 从工作流程进行预测
- R workflows glance.workflow 工作流程模型一览
- R workflows is_trained_workflow 确定工作流程是否经过训练
- R workflows fit-workflow 适合工作流对象
- R workflows control_workflow 工作流的控制对象
- 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 workflow_map 处理一系列工作流程
- R workflowsets as_workflow_set 将现有对象转换为工作流集
- R workflowsets option_list 制作一个分类的选项列表
- R workflowsets rank_results 按指标对结果进行排名
- R workflowsets workflow_set 从预处理和模型对象生成一组工作流对象
- R workflowsets pull_workflow_set_result 从工作流集中提取元素
- R workflowsets autoplot.workflow_set 绘制工作流程集的结果
注:本文由纯净天空筛选整理自Davis Vaughan等大神的英文原创作品 Add formula terms to a workflow。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。