当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R embed step_embed 将因子编码到多列中


step_embed() 创建配方步骤的规范,该步骤将标称(即因子)预测变量转换为通过 word-embedding 模型从张量流模型派生的一组分数。 embed_control 是一个用于设置默认选项的简单包装。

用法

step_embed(
  recipe,
  ...,
  role = "predictor",
  trained = FALSE,
  outcome = NULL,
  predictors = NULL,
  num_terms = 2,
  hidden_units = 0,
  options = embed_control(),
  mapping = NULL,
  history = NULL,
  keep_original_cols = FALSE,
  skip = FALSE,
  id = rand_id("embed")
)

embed_control(
  loss = "mse",
  metrics = NULL,
  optimizer = "sgd",
  epochs = 20,
  validation_split = 0,
  batch_size = 32,
  verbose = 0,
  callbacks = NULL
)

参数

recipe

一个菜谱对象。该步骤将添加到此配方的操作序列中。

...

一个或多个选择器函数用于选择变量。对于 step_embed ,这表示要编码为数字格式的变量。有关更多详细信息,请参阅recipes::selections()。对于tidy 方法,当前未使用这些。

role

对于此步骤创建的模型项,应为它们分配什么分析角色?默认情况下,该函数假设创建的嵌入变量将用作模型中的预测变量。

trained

指示预处理数量是否已估计的逻辑。

outcome

调用 vars 以指定哪个变量用作神经网络中的结果。

predictors

vars 的可选调用,以指定要添加为神经网络中的附加预测变量的任何变量。这些变量应该是数字,并且可能是居中和缩放的。

num_terms

结果变量数量的整数。

hidden_units

嵌入和稍后输出之间的密集 ReLu 层中隐藏单元数量的整数。使用零值表示没有中间层(请参阅下面的详细信息)。

options

模型拟合过程的选项列表。

mapping

定义编码的 tibble 结果列表。在 recipes::prep() 训练该步骤之前,这是 NULL

history

包含每个术语的收敛统计数据的小标题。在 recipes::prep() 训练该步骤之前,这是 NULL

keep_original_cols

将原始变量保留在输出中的逻辑。默认为 FALSE

skip

一个合乎逻辑的。当recipes::bake() 烘焙食谱时是否应该跳过此步骤?虽然所有操作都是在 recipes::prep() 运行时烘焙的,但某些操作可能无法对新数据进行(例如处理结果变量)。使用skip = TRUE时应小心,因为它可能会影响后续操作的计算。

id

该步骤特有的字符串,用于标识它。

optimizer, loss, metrics

传递给keras::compile()的参数

epochs, validation_split, batch_size, verbose, callbacks

传递给keras::fit()的参数

recipe 的更新版本,其中新步骤添加到现有步骤(如果有)的序列中。对于 tidy 方法,一个 tibble 包含列 terms(用于编码的选择器或变量)、level(因子级别)以及名称中包含 embed 的多个列。

细节

因子水平最初随机分配给新变量,这些变量在神经网络中用于优化新列的水平分配以及估计模型以预测结果。有关更多详细信息,请参阅 Francois 和 Allaire (2018) 的第 6.1.2 节。

新变量被映射到模型训练时看到的特定级别,并且变量的额外实例用于因子的新级别。

每次调用 step_embed 都会创建一个模型。该步骤的所有项均在同一模型中进行估计和编码,该模型还包含 predictors 中给出的预测变量(如果有)。

当结果是数字时,最后一层使用线性激活函数,而 softmax 用于因子结果(具有任意数量的级别)。

例如,用于数字结果、一个分类预测变量且此处不使用任何隐藏单元的 keras 代码将是

  keras_model_sequential() %>%
  layer_embedding(
    input_dim = num_factor_levels_x + 1,
    output_dim = num_terms,
    input_length = 1
  ) %>%
  layer_flatten() %>%
  layer_dense(units = 1, activation = 'linear')

如果使用因子结果并请求隐藏单元,则代码将为

  keras_model_sequential() %>%
  layer_embedding(
    input_dim = num_factor_levels_x + 1,
    output_dim = num_terms,
    input_length = 1
   ) %>%
  layer_flatten() %>%
  layer_dense(units = hidden_units, activation = "relu") %>%
  layer_dense(units = num_factor_levels_y, activation = 'softmax')

predictors 指定的其他变量将作为附加密集层添加到 layer_flatten 之后、隐藏层之前。

另请注意,由于 Tensorflow 的性质,使用此步骤可能很难获得可重现的结果(请参阅参考文献中的链接)。

张量流模型不能在同一会话(通过 foreachfutures )或 parallel 包中并行运行。如果将此步骤与 caret 一起使用,请避免并行处理。

整理

当您 tidy() 此步骤时,将返回一个包含列 terms(选择的选择器或变量)、levels(变量中的级别)以及许多包含嵌入信息的列的 tibble。

调整参数

此步骤有 2 个调整参数:

  • num_terms : # 模型术语(类型:整数,默认值:2)

  • hidden_units : # 隐藏单位(类型:整数,默认值:0)

箱重

底层操作不允许使用案例权重。

参考

Francois C 和 Allaire JJ (2018) 使用 R 进行深度学习,Manning

“使用 Keras 连接分类变量的嵌入”https://flovv.github.io/Embeddings_with_keras_part2/

例子

data(grants, package = "modeldata")

set.seed(1)
grants_other <- sample_n(grants_other, 500)

rec <- recipe(class ~ num_ci + sponsor_code, data = grants_other) %>%
  step_embed(sponsor_code,
    outcome = vars(class),
    options = embed_control(epochs = 10)
  )
源代码:R/embed.R

相关用法


注:本文由纯净天空筛选整理自Max Kuhn等大神的英文原创作品 Encoding Factors into Multiple Columns。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。