當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。