Gradient boosting makineleri

R'de Supervised Learning: Regresyon

Nina Zumel and John Mount

Win-Vector, LLC

Gradient Boosting nasıl çalışır

  1. Veriye sığ bir ağaç $T_1$ uydur: $M_1 = T_1$
R'de Supervised Learning: Regresyon

Gradient Boosting nasıl çalışır

  1. Veriye sığ bir ağaç $T_1$ uydur: $M_1 = T_1$
  2. Artıklara T_2 ağacı uydur. $\gamma$ öyle seç ki $M_2 = M_1 + \gamma T_2$ veriye en iyi uyumu versin
R'de Supervised Learning: Regresyon

Gradient Boosting nasıl çalışır

Düzenlileştirme: öğrenme oranı $\eta \in(0,1)$

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

  • Büyük $\eta$: daha hızlı öğrenir
  • Küçük $\eta$: aşırı uyum riski daha az
R'de Supervised Learning: Regresyon

Gradient Boosting nasıl çalışır

  1. Veriye sığ bir ağaç $T_1$ uydur
    • $M_1 = T_1$
  2. Artıklara T_2 ağacı uydur.
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. (2)'yi durdurma koşuluna kadar tekrarla

Nihai Model:

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

R'de Supervised Learning: Regresyon

Aşırı uyuma karşı çapraz doğrulama

Eğitim hatası düşmeye devam eder, ama test hatası etmez

R'de Supervised Learning: Regresyon

En iyi uygulama (xgboost() ile)

  1. Çok sayıda tur (ağaç) ile xgb.cv() çalıştır.
R'de Supervised Learning: Regresyon

En iyi uygulama (xgboost() ile)

  1. Çok sayıda tur (ağaç) ile xgb.cv() çalıştır.
  2. xgb.cv()$evaluation_log: her tur için tahmini RMSE'yi kaydeder.
    • Tahmini RMSE'yi en aza indiren ağaç sayısını bul: $n_{best}$
R'de Supervised Learning: Regresyon

En iyi uygulama (xgboost() ile)

  1. Çok sayıda tur (ağaç) ile xgb.cv() çalıştır.
  2. xgb.cv()$evaluation_log: her tur için tahmini RMSE'yi kaydeder.
    • Tahmini RMSE'yi en aza indiren ağaç sayısını bul: $n_{best}$
  3. xgboost() çalıştır, nrounds = $n_{best}$ ayarla
R'de Supervised Learning: Regresyon

Örnek: Bisiklet kiralama modeli

Önce veriyi hazırla

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

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

xgboost() için:

  • Girdi verisi: as.matrix(bikesJan.treat)
  • Sonuç: bikesJan$cnt
R'de Supervised Learning: Regresyon

xgboost() / xgb.cv() ile model eğitimi

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

xgb.cv() ve xgboost() için temel girdiler

  • data: matris olarak girdi verisi ; label: sonuç
  • objective: regresyon için - "reg:squarederror"
  • nrounds: uydurulacak azami ağaç sayısı
  • eta: öğrenme oranı
  • max_depth: tekil ağaçların azami derinliği
  • nfold (yalnızca xgb.cv()): çapraz doğrulama kat sayısı
R'de Supervised Learning: Regresyon

Doğru ağaç sayısını bul

elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
R'de Supervised Learning: Regresyon

Nihai model için xgboost() çalıştır

nrounds <- 78

model <- xgboost(data = as.matrix(bikesJan.treat), 
                 label = bikesJan$cnt,
                 nrounds = nrounds,
                 objective = "reg:squarederror",
                 eta = 0.3,
                 max_depth = 6)
R'de Supervised Learning: Regresyon

xgboost() modeliyle tahmin

Şubat verisini hazırla ve tahmin et

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

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

Model performansları (Şubat verisi)

Model RMSE
Quasipoisson 69.3
Random forests 67.15
Gradient Boosting 54.0
R'de Supervised Learning: Regresyon

Sonuçları görselleştir

Tahminler vs. Gerçek Bisiklet Kiralamaları, Şubat

Tahminler ve Saatlik Bisiklet Kiralamaları, Şubat

R'de Supervised Learning: Regresyon

Hadi pratik yapalım!

R'de Supervised Learning: Regresyon

Preparing Video For Download...