1

许多特征工程步骤是不需要在数据集上“训练”的转换,例如,创建一个新列 x2 作为 x2=2*x1。这些“静态变换”与“可训练”变换不同,例如贬低和重新缩放。

我不想依赖诸如 step_mutate() 之类的食谱包函数,而是想定义一个函数,例如 do_static_transforms(),它接受一个小标题并输出一个转换后的小标题。我想将此作为食谱的第一步。或者,我想将此添加为工作流程中的第一步(另一个 tidymodels 包)。

这是一个明智和可能的事情吗?

4

1 回答 1

0

我建议您在开始使用 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对象将是您从拆分为测试和训练开始的对象。为了预测新的观察结果,您将实施相同的转换。因为这些转换不是从数据中学习的,所以不存在数据泄露的风险。

于 2020-07-17T22:47:55.403 回答