特徴ハッシング

Rで学ぶ特徴量エンジニアリング

Jorge Zazueta

Research Professor and Head of the Modeling Group at the School of Economics, UASLP

特徴ハッシングとは?

  • テキスト変数を数値変数の集合に変換
  • 特徴のインデックスに「ハッシュ値」を使用
  • 省メモリなデータ表現
  • 新しいデータで未知のカテゴリが出る場合に有用

テキスト値に基づき、各 carrier にインデックス番号を割り当てます。

航空会社に対する特徴ハッシングの表。

Rで学ぶ特徴量エンジニアリング

carrier はいくつあるか?

flights データには carrier が因子として含まれますが、新しいデータで新たな carrier が現れるかは不明です。

flights %>%
  select(carrier) %>%
  table()
carrier
  9E   AA   AS   B6   DL   EV   F9   FL   HA   MQ   OO   UA   US   VX   WN   YV 
 859 1744   26 2503 2619 3014   38  186   14 1540    2 3367 1228  244  757   41
Rで学ぶ特徴量エンジニアリング

この特徴をハッシュ化しましょう

textrecipes パッケージで因子値を表すダミー・ハッシュを作成できます。

recipe <- recipe(~carrier, 
                 data = flights_train) %>%
  step_dummy_hash(carrier, prefix = NULL, 
                  signed = FALSE, 
                  num_terms = 50L)
# レシピを準備
object <- recipe %>%
  prep()

# 新しいデータでベイク
baked <- bake(object,
              new_data = flights_test)

step_dummy_hash() の表現を一部確認します。

bind_cols(flights_test$carrier,baked)[1:6,c(1,18:20)]
New names:
• `` -> `...1`
# A tibble: 10 × 4
   ...1  `_carrier_17` `_carrier_18` `_carrier_19`
   <chr>         <int>         <int>         <int>
 1 EV                0             0             0
 2 B6                0             1             0
 3 EV                0             0             0
 4 MQ                0             0             0
 5 DL                0             0             0
 6 EV                0             0             0
Rで学ぶ特徴量エンジニアリング

ハッシュの可視化

plot.matrix パッケージで行列を可視化できます。

flights_hash <- 
    as.matrix(baked)[1:50,] 

plot(flights_hash, 
     col = c("white","steelblue"), 
     key = NULL,
     border = NA)

元の carrier 因子のダミー・ハッシュ割当のサンプル図。

Rで学ぶ特徴量エンジニアリング

Passons à la pratique !

Rで学ぶ特徴量エンジニアリング

Preparing Video For Download...