One-Hot Encoding de Variáveis Categóricas

Aprendizado Supervisionado em R: Regressão

Nina Zumel and John Mount

Win-Vector, LLC

Por que converter categóricas manualmente?

  • A maioria das funções em R faz a conversão para você
    • model.matrix()
  • xgboost() não faz
    • É preciso converter variáveis categóricas para numéricas
  • Conversão em indicadores: one-hot encoding
Aprendizado Supervisionado em R: Regressão

One-hot encoding e limpeza de dados com `vtreat`

Ideia básica:

  • designTreatmentsZ() para criar um plano de tratamento com os dados de treino e
  • prepare() para gerar dados "limpos"
    • todos numéricos
    • sem valores ausentes
      • use prepare() com o plano para todos os dados futuros
Aprendizado Supervisionado em R: Regressão

Um pequeno exemplo com vtreat

Dados de treino

x u y
one 44 0.4855671
two 24 1.3683726
three 66 2.0352837
two 22 1.6396267

Dados de teste

x u y
one 5 2.6488148
three 12 1.5012938
one 56 0.1993731
two 28 1.2778516
Aprendizado Supervisionado em R: Regressão

Criar o plano de tratamento

vars <- c("x", "u")
treatplan <- designTreatmentsZ(dframe, varslist, verbose = FALSE)

Entradas de designTreatmentsZ()

  • dframe: dados de treino
  • varlist: lista de nomes das variáveis de entrada
  • defina verbose = FALSE para suprimir mensagens de progresso
Aprendizado Supervisionado em R: Regressão

Obter as novas variáveis

O scoreFrame descreve o mapeamento e os tipos das variáveis

(scoreFrame <- treatplan$scoreFrame %>% 
     select(varName, origName, code))
        varName origName  code
1   x_lev_x.one        x   lev
2 x_lev_x.three        x   lev
3   x_lev_x.two        x   lev
4        x_catP        x  catP
5       u_clean        u clean

Obtenha os nomes das novas variáveis lev e clean

(newvars <- scoreFrame %>% 
     filter(code %in% c("clean", "lev")) %>%
     use_series(varName))
"x_lev_x.one"   "x_lev_x.three" "x_lev_x.two"   "u_clean"
Aprendizado Supervisionado em R: Regressão

Preparar os dados de treino para modelagem

training.treat <- prepare(treatmentplan, dframe, varRestriction = newvars)

Entradas de prepare():

  • treatmentplan: plano de tratamento
  • dframe: data frame
  • varRestriction: lista de variáveis a preparar (opcional)
    • padrão: preparar todas as variáveis
Aprendizado Supervisionado em R: Regressão

Antes e depois do tratamento de dados

Dados de treino

x u y
one 44 0.4855671
two 24 1.3683726
three 66 2.0352837
two 22 1.6396267

Dados tratados de treino

x_lev _x. one x_lev _x. three x_lev _x. two u_clean
1 0 0 44
0 0 1 24
0 1 0 66
0 0 1 22
Aprendizado Supervisionado em R: Regressão

Preparar os dados de teste antes de aplicar o modelo

(test.treat <- prepare(treatplan, test, varRestriction = newvars))
  x_lev_x.one x_lev_x.three x_lev_x.two u_clean
1           1             0           0       5
2           0             1           0      12
3           1             0           0      56
4           0             0           1      28
Aprendizado Supervisionado em R: Regressão

O tratamento do vtreat é robusto

Nível de x não visto antes: four

x u y
one 4 0.2331301
two 14 1.9331760
three 66 3.1251029
four 25 4.0332491

four é codificado como (0, 0, 0)

prepare(treatplan, toomany, ...)
x_lev _x. one x_lev _x. three x_lev _x. two u_clean
1 0 0 4
0 0 1 14
0 1 0 66
0 0 0 25
Aprendizado Supervisionado em R: Regressão

Vamos praticar!

Aprendizado Supervisionado em R: Regressão

Preparing Video For Download...