One-Hot-Encoding de variables categóricas

Aprendizaje supervisado en R: Regresión

Nina Zumel and John Mount

Win-Vector, LLC

¿Por qué convertir categóricas manualmente?

  • La mayoría de funciones de R hacen la conversión por ti
    • model.matrix()
  • xgboost() no lo hace
    • Debes convertir las variables categóricas a representación numérica
  • Conversión a indicadores: one-hot encoding
Aprendizaje supervisado en R: Regresión

One-hot encoding y limpieza con `vtreat`

Idea básica:

  • designTreatmentsZ() para diseñar un plan de tratamiento a partir de los datos de entrenamiento, y luego
  • prepare() para crear datos «limpios»
    • todo numérico
    • sin valores ausentes
      • usa prepare() con el plan para todos los datos futuros
Aprendizaje supervisado en R: Regresión

Un ejemplo sencillo de vtreat

Datos de entrenamiento

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

Datos de prueba

x u y
one 5 2.6488148
three 12 1.5012938
one 56 0.1993731
two 28 1.2778516
Aprendizaje supervisado en R: Regresión

Crear el plan de tratamiento

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

Entradas de designTreatmentsZ()

  • dframe: datos de entrenamiento
  • varlist: lista de nombres de variables de entrada
  • establece verbose = FALSE para suprimir mensajes de progreso
Aprendizaje supervisado en R: Regresión

Obtener las nuevas variables

El scoreFrame describe el mapeo y tipos de variables

(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

Obtén los nombres de las nuevas variables lev y 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"
Aprendizaje supervisado en R: Regresión

Preparar los datos de entrenamiento para modelar

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

Entradas de prepare():

  • treatmentplan: plan de tratamiento
  • dframe: data frame
  • varRestriction: lista de variables a preparar (opcional)
    • por defecto: prepara todas las variables
Aprendizaje supervisado en R: Regresión

Antes y después del tratamiento de datos

Datos de entrenamiento

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

Datos de entrenamiento tratados

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
Aprendizaje supervisado en R: Regresión

Preparar los datos de prueba antes de aplicar el 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
Aprendizaje supervisado en R: Regresión

El tratamiento de vtreat es robusto

Nivel x no visto antes: four

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

four se codifica 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
Aprendizaje supervisado en R: Regresión

¡Vamos a practicar!

Aprendizaje supervisado en R: Regresión

Preparing Video For Download...