Encodage one-hot des variables catégorielles

Apprentissage supervisé en R : régression

Nina Zumel and John Mount

Win-Vector, LLC

Pourquoi convertir les catégorielles manuellement ?

  • La plupart des fonctions R gèrent la conversion pour vous
    • model.matrix()
  • xgboost() ne le fait pas
    • Il faut convertir les variables catégorielles en numériques
  • Conversion en indicateurs : one-hot encoding
Apprentissage supervisé en R : régression

One-hot encoding et nettoyage des données avec `vtreat`

Idée de base :

  • designTreatmentsZ() pour concevoir un plan de traitement à partir des données d'entraînement, puis
  • prepare() pour créer des données « propres »
    • toutes numériques
    • aucune valeur manquante
      • utiliser prepare() avec le plan pour toutes les données futures
Apprentissage supervisé en R : régression

Petit exemple avec vtreat

Données d'entraînement

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

Données de test

x u y
one 5 2.6488148
three 12 1.5012938
one 56 0.1993731
two 28 1.2778516
Apprentissage supervisé en R : régression

Créer le plan de traitement

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

Entrées de designTreatmentsZ()

  • dframe : données d'entraînement
  • varlist : liste des variables d'entrée
  • définir verbose = FALSE pour masquer les messages de progression
Apprentissage supervisé en R : régression

Obtenir les nouvelles variables

Le scoreFrame décrit la correspondance et les types des 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

Obtenir les noms des nouvelles variables lev et 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"
Apprentissage supervisé en R : régression

Préparer les données d'entraînement pour le modèle

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

Entrées de prepare() :

  • treatmentplan : plan de traitement
  • dframe : data frame
  • varRestriction : liste de variables à préparer (facultatif)
    • par défaut : préparer toutes les variables
Apprentissage supervisé en R : régression

Avant et après le traitement des données

Données d'entraînement

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

Données d'entraînement traitées

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
Apprentissage supervisé en R : régression

Préparer les données de test avant d'appliquer le modèle

(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
Apprentissage supervisé en R : régression

Le traitement vtreat est robuste

Niveau x inédit : four

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

four s'encode en (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
Apprentissage supervisé en R : régression

Passons à la pratique !

Apprentissage supervisé en R : régression

Preparing Video For Download...