特征哈希

R 中的特征工程

Jorge Zazueta

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

什么是特征哈希?

  • 将文本变量转换为一组数值变量
  • 使用"哈希值"作为特征索引
  • 数据的低内存表示
  • 当新数据可能出现新类别时很有用

基于文本值为每个承运人分配索引号。

展示航空承运人特征哈希的表格。

R 中的特征工程

有多少个承运人?

flights 数据集中包含承运人(因子),但我们不知道在新数据中是否会出现新的承运人。

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)

原始承运人因子的部分哑哈希分配的图示。

R 中的特征工程

Passons à la pratique !

R 中的特征工程

Preparing Video For Download...