【问题标题】:Tidymodels recipes - add a step that just applies a feature engineering function?Tidymodels 食谱 - 添加一个仅应用特征工程功能的步骤?
【发布时间】:2020-10-28 15:43:49
【问题描述】:

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

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

这样做是否明智且可行?

【问题讨论】:

  • 如果你这样做,你可能需要包含step_lincomb。您的示例 x2 将被删除:)

标签: tidymodels r-recipes


【解决方案1】:

我建议您考虑在开始使用食谱或其他 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 package (v0.3.0) 于 2020-07-17 创建

那么这个ames_transformed 对象将是您从拆分为测试和训练开始的对象。为了预测新的观察结果,您将实施相同的转换。因为这些转换不是从数据中学习的,所以不存在数据泄露的风险。

【讨论】:

    猜你喜欢
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    相关资源
    最近更新 更多