勾配ブースティングマシン

R による Supervised Learning:回帰

Nina Zumel and John Mount

Win-Vector, LLC

勾配ブースティングの仕組み

  1. 浅い木 $T_1$ をデータに適合させる:$M_1 = T_1$
R による Supervised Learning:回帰

勾配ブースティングの仕組み

  1. 浅い木 $T_1$ をデータに適合させる:$M_1 = T_1$
  2. 残差に木 T_2 を適合させる。次を満たす $\gamma$ を求める $M_2 = M_1 + \gamma T_2$ がデータに最もよく適合する
R による Supervised Learning:回帰

勾配ブースティングの仕組み

正則化:学習率 $\eta \in(0,1)$

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

  • $\eta$ が大きい:学習が速い
  • $\eta$ が小さい:過学習のリスクが低い
R による Supervised Learning:回帰

勾配ブースティングの仕組み

  1. 浅い木 $T_1$ をデータに適合させる
    • $M_1 = T_1$
  2. 残差に木 T_2 を適合させる
    • $M_2 = M_1 + \eta \gamma_2 T_2$
  3. 停止条件を満たすまで (2) を繰り返す

最終モデル:

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

R による Supervised Learning:回帰

交差検証による過学習の防止

訓練誤差は下がり続けるが、テスト誤差は改善しない

R による Supervised Learning:回帰

ベストプラクティス(xgboost() の使い方)

  1. 多数のラウンド(木)を指定して xgb.cv() を実行する
R による Supervised Learning:回帰

ベストプラクティス(xgboost() の使い方)

  1. 多数のラウンド(木)を指定して xgb.cv() を実行する
  2. xgb.cv()$evaluation_log:各ラウンドの推定 RMSE を記録
    • 推定 RMSE を最小化する木の数を求める:$n_{best}$
R による Supervised Learning:回帰

ベストプラクティス(xgboost() の使い方)

  1. 多数のラウンド(木)を指定して xgb.cv() を実行する
  2. xgb.cv()$evaluation_log:各ラウンドの推定 RMSE を記録
    • 推定 RMSE を最小化する木の数を求める:$n_{best}$
  3. xgboost() を実行し、nrounds = $n_{best}$ と設定する
R による Supervised Learning:回帰

例:自転車レンタルモデル

まずデータを前処理する

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

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

xgboost() の入力:

  • 入力データ:as.matrix(bikesJan.treat)
  • 目的変数:bikesJan$cnt
R による Supervised Learning:回帰

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)

xgb.cv()xgboost() の主な引数

  • data:行列形式の入力データ;label:目的変数
  • objective:回帰の場合 - "reg:squarederror"
  • nrounds:適合させる木の最大数
  • eta:学習率
  • max_depth:個々の木の最大深さ
  • nfoldxgb.cv() のみ):交差検証の分割数
R による Supervised Learning:回帰

最適な木の数の探索

elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
R による Supervised Learning:回帰

xgboost() で最終モデルを構築する

nrounds <- 78

model <- xgboost(data = as.matrix(bikesJan.treat), 
                 label = bikesJan$cnt,
                 nrounds = nrounds,
                 objective = "reg:squarederror",
                 eta = 0.3,
                 max_depth = 6)
R による Supervised Learning:回帰

xgboost() モデルによる予測

2月のデータを前処理し、予測を行う

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

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

2月データにおけるモデル性能

モデル RMSE
準ポアソン 69.3
ランダムフォレスト 67.15
勾配ブースティング 54.0
R による Supervised Learning:回帰

結果の可視化

予測値と実際の自転車レンタル数(2月)

予測値と時間別自転車レンタル数(2月)

R による Supervised Learning:回帰

練習しましょう!

R による Supervised Learning:回帰

Preparing Video For Download...