One-Hot-Encoding kategorialer Variablen

Überwachtes Lernen in R: Regression

Nina Zumel and John Mount

Win-Vector, LLC

Warum Kategoriales manuell umwandeln?

  • Die meisten R-Funktionen übernehmen die Umwandlung für dich
    • model.matrix()
  • xgboost() nicht
    • Kategoriale Variablen müssen in numerische Darstellung umgewandelt werden
  • Umwandlung in Indikatoren: One-Hot-Encoding
Überwachtes Lernen in R: Regression

One-Hot-Encoding und Datenbereinigung mit `vtreat`

Grundidee:

  • designTreatmentsZ() entwirft einen Behandlungsplan aus den Trainingsdaten, dann
  • prepare() erstellt „saubere" Daten
    • alles numerisch
    • keine fehlenden Werte
      • verwende prepare() mit dem Behandlungsplan für alle zukünftigen Daten
Überwachtes Lernen in R: Regression

Ein kleines vtreat-Beispiel

Trainingsdaten

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

Testdaten

x u y
one 5 2.6488148
three 12 1.5012938
one 56 0.1993731
two 28 1.2778516
Überwachtes Lernen in R: Regression

Behandlungsplan erstellen

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

Eingaben für designTreatmentsZ()

  • dframe: Trainingsdaten
  • varlist: Liste der Eingabevariablennamen
  • verbose = FALSE setzen, um Fortschrittsmeldungen zu unterdrücken
Überwachtes Lernen in R: Regression

Neue Variablennamen holen

Das scoreFrame beschreibt Variablenmapping und -typen

(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

Hole die Namen der neuen lev- und clean-Variablen

(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"
Überwachtes Lernen in R: Regression

Trainingsdaten fürs Modell aufbereiten

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

Eingaben für prepare():

  • treatmentplan: Behandlungsplan
  • dframe: Data Frame
  • varRestriction: Liste der aufzubereitenden Variablen (optional)
    • Standard: alle Variablen aufbereiten
Überwachtes Lernen in R: Regression

Daten vor und nach der Behandlung

Trainingsdaten

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

Aufbereitete Trainingsdaten

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
Überwachtes Lernen in R: Regression

Testdaten vor der Modellanwendung aufbereiten

(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
Überwachtes Lernen in R: Regression

vtreat-Behandlung ist robust

Zuvor unbekanntes x-Level: four

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

four wird zu (0, 0, 0) encodiert

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
Überwachtes Lernen in R: Regression

Lass uns üben!

Überwachtes Lernen in R: Regression

Preparing Video For Download...