许多特征工程步骤是不需要在数据集上“训练”的转换,例如,创建一个新列 x2 作为 x2=2*x1。这些“静态变换”与“可训练”变换不同,例如贬低和重新缩放。
我不想依赖诸如 step_mutate() 之类的食谱包函数,而是想定义一个函数,例如 do_static_transforms(),它接受一个小标题并输出一个转换后的小标题。我想将此作为食谱的第一步。或者,我想将此添加为工作流程中的第一步(另一个 tidymodels 包)。
这是一个明智和可能的事情吗?
许多特征工程步骤是不需要在数据集上“训练”的转换,例如,创建一个新列 x2 作为 x2=2*x1。这些“静态变换”与“可训练”变换不同,例如贬低和重新缩放。
我不想依赖诸如 step_mutate() 之类的食谱包函数,而是想定义一个函数,例如 do_static_transforms(),它接受一个小标题并输出一个转换后的小标题。我想将此作为食谱的第一步。或者,我想将此添加为工作流程中的第一步(另一个 tidymodels 包)。
这是一个明智和可能的事情吗?
我建议您在开始使用 recipes 或其他 tidymodels 包之前,考虑在数据操作步骤中实现这些类型的“静态转换”。例如,如果您想获取log()
价格等结果或将列除以标量,您可以在开始使用 tidymodels 之前执行此操作:
library(tidymodels)
#> ── Attaching packages ─────────────────────────── tidymodels 0.1.1 ──
#> ✓ broom 0.7.0 ✓ recipes 0.1.13
#> ✓ dials 0.0.8 ✓ rsample 0.0.7
#> ✓ dplyr 1.0.0 ✓ tibble 3.0.3
#> ✓ ggplot2 3.3.2 ✓ tidyr 1.1.0
#> ✓ infer 0.5.3 ✓ tune 0.1.1
#> ✓ modeldata 0.0.2 ✓ workflows 0.1.2
#> ✓ parsnip 0.1.2 ✓ yardstick 0.0.7
#> ✓ purrr 0.3.4
#> ── Conflicts ────────────────────────────── tidymodels_conflicts() ──
#> x purrr::discard() masks scales::discard()
#> x dplyr::filter() masks stats::filter()
#> x dplyr::lag() masks stats::lag()
#> x recipes::step() masks stats::step()
data(ames)
ames_transformed <- ames %>%
mutate(Sale_Price = log(Sale_Price),
Lot_Area = Lot_Area / 1e3)
由reprex 包(v0.3.0)于 2020-07-17 创建
那么这个ames_transformed
对象将是您从拆分为测试和训练开始的对象。为了预测新的观察结果,您将实施相同的转换。因为这些转换不是从数据中学习的,所以不存在数据泄露的风险。