Gradient boosting machines

Nadzorowane uczenie maszynowe w R: regresja

Nina Zumel and John Mount

Win-Vector, LLC

Jak działa gradient boosting

  1. Dopasuj płytkie drzewo $T_1$ do danych: $M_1 = T_1$
Nadzorowane uczenie maszynowe w R: regresja

Jak działa gradient boosting

  1. Dopasuj płytkie drzewo $T_1$ do danych: $M_1 = T_1$
  2. Dopasuj drzewo T_2 do reszt. Znajdź $\gamma$ takie, że $M_2 = M_1 + \gamma T_2$ jest najlepszym dopasowaniem do danych
Nadzorowane uczenie maszynowe w R: regresja

Jak działa gradient boosting

Regularyzacja: współczynnik uczenia $\eta \in(0,1)$

$$ M_2 = M_1 + \eta \gamma T_2 $$

  • Większe $\eta$: szybsze uczenie
  • Mniejsze $\eta$: mniejsze ryzyko przeuczenia
Nadzorowane uczenie maszynowe w R: regresja

Jak działa gradient boosting

  1. Dopasuj płytkie drzewo $T_1$ do danych
    • $M_1 = T_1$
  2. Dopasuj drzewo T_2 do reszt.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. Powtarzaj (2) do spełnienia warunku stopu

Model końcowy:

$$ M = M_1 + \eta \sum \gamma_i T_i $$

Nadzorowane uczenie maszynowe w R: regresja

Walidacja krzyżowa chroniąca przed przeuczeniem

Błąd treningowy maleje, ale testowy nie

Nadzorowane uczenie maszynowe w R: regresja

Najlepsza praktyka (z xgboost())

  1. Uruchom xgb.cv() z dużą liczbą rund (drzew).
Nadzorowane uczenie maszynowe w R: regresja

Najlepsza praktyka (z xgboost())

  1. Uruchom xgb.cv() z dużą liczbą rund (drzew).
  2. xgb.cv()$evaluation_log: rejestruje szacowany RMSE dla każdej rundy.
    • Znajdź liczbę drzew minimalizującą szacowany RMSE: $n_{best}$
Nadzorowane uczenie maszynowe w R: regresja

Najlepsza praktyka (z xgboost())

  1. Uruchom xgb.cv() z dużą liczbą rund (drzew).
  2. xgb.cv()$evaluation_log: rejestruje szacowany RMSE dla każdej rundy.
    • Znajdź liczbę drzew minimalizującą szacowany RMSE: $n_{best}$
  3. Uruchom xgboost(), ustawiając nrounds = $n_{best}$
Nadzorowane uczenie maszynowe w R: regresja

Przykład: model wypożyczalni rowerów

Najpierw przygotuj dane

treatplan <- designTreatmentsZ(bikesJan, vars)
newvars <- treatplan$scoreFrame %>%
     filter(code %in% c("clean", "lev")) %>%
     use_series(varName)

bikesJan.treat <- prepare(treatplan, bikesJan, varRestriction = newvars)

Dla xgboost():

  • Dane wejściowe: as.matrix(bikesJan.treat)
  • Wynik: bikesJan$cnt
Nadzorowane uczenie maszynowe w R: regresja

Trenowanie modelu z xgboost() / xgb.cv()

cv <- xgb.cv(data = as.matrix(bikesJan.treat), label = bikesJan$cnt,
              objective = "reg:squarederror",
              nrounds = 100, nfold = 5, eta = 0.3, max_depth = 6)

Główne parametry xgb.cv() i xgboost()

  • data: dane wejściowe jako macierz; label: wynik
  • objective: dla regresji – "reg:squarederror"
  • nrounds: maksymalna liczba drzew
  • eta: współczynnik uczenia
  • max_depth: maksymalna głębokość drzew
  • nfold (tylko xgb.cv()): liczba foldów walidacji krzyżowej
Nadzorowane uczenie maszynowe w R: regresja

Wyznaczanie optymalnej liczby drzew

elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
Nadzorowane uczenie maszynowe w R: regresja

Uruchomienie xgboost() dla modelu końcowego

nrounds <- 78

model <- xgboost(data = as.matrix(bikesJan.treat), 
                 label = bikesJan$cnt,
                 nrounds = nrounds,
                 objective = "reg:squarederror",
                 eta = 0.3,
                 max_depth = 6)
Nadzorowane uczenie maszynowe w R: regresja

Predykcja z modelem xgboost()

Przygotuj dane z lutego i wykonaj predykcje

bikesFeb.treat <- prepare(treatplan, bikesFeb, varRestriction = newvars)

bikesFeb$pred <- predict(model, as.matrix(bikesFeb.treat))

Wyniki modeli na danych z lutego

Model RMSE
Quasipoisson 69,3
Random forests 67,15
Gradient Boosting 54,0
Nadzorowane uczenie maszynowe w R: regresja

Wizualizacja wyników

Predykcje a rzeczywiste wypożyczenia rowerów, luty

Predykcje i godzinowe wypożyczenia rowerów, luty

Nadzorowane uczenie maszynowe w R: regresja

Czas na ćwiczenia!

Nadzorowane uczenie maszynowe w R: regresja

Preparing Video For Download...