One-Hot-Encoding kategorických proměnných

Supervised Learning in R: Regression

Nina Zumel and John Mount

Win-Vector, LLC

Proč převádět kategorické proměnné ručně?

  • Většina funkcí R převod provádí automaticky
    • model.matrix()
  • xgboost() nikoli
    • Kategorické proměnné je nutné převést na číselnou reprezentaci
  • Převod na indikátory: one-hot encoding
Supervised Learning in R: Regression

One-hot-encoding a čištění dat pomocí `vtreat`

Základní myšlenka:

  • designTreatmentsZ() pro návrh plánu úpravy z trénovacích dat, poté
  • prepare() pro vytvoření „čistých" dat
    • vše numerické
    • žádné chybějící hodnoty
      • prepare() s plánem úpravy použít pro všechna budoucí data
Supervised Learning in R: Regression

Malý příklad s vtreat

Trénovací data

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

Testovací data

x u y
one 5 2.6488148
three 12 1.5012938
one 56 0.1993731
two 28 1.2778516
Supervised Learning in R: Regression

Vytvoření plánu úpravy

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

Vstupy funkce designTreatmentsZ()

  • dframe: trénovací data
  • varlist: seznam názvů vstupních proměnných
  • verbose = FALSE potlačí zprávy o průběhu
Supervised Learning in R: Regression

Získání nových proměnných

scoreFrame popisuje mapování a typy proměnných

(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

Získat názvy nových proměnných lev a 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"
Supervised Learning in R: Regression

Příprava trénovacích dat pro modelování

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

Vstupy funkce prepare():

  • treatmentplan: plán úpravy
  • dframe: datový rámec
  • varRestriction: seznam proměnných k přípravě (volitelné)
    • výchozí: příprava všech proměnných
Supervised Learning in R: Regression

Data před a po úpravě

Trénovací data

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

Upravená trénovací data

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
Supervised Learning in R: Regression

Příprava testovacích dat před aplikací modelu

(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
Supervised Learning in R: Regression

Úprava pomocí vtreat je robustní

Dříve neviděná úroveň x: four

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

four se zakóduje jako (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
Supervised Learning in R: Regression

Pojďme si procvičit!

Supervised Learning in R: Regression

Preparing Video For Download...