R による Supervised Learning:回帰
Nina Zumel and John Mount
Win-Vector, LLC



正則化:学習率 $\eta \in(0,1)$
$$ M_2 = M_1 + \eta \gamma T_2 $$

最終モデル:
$$ M = M_1 + \eta \sum \gamma_i T_i $$

訓練誤差は下がり続けるが、テスト誤差は改善しない
xgb.cv() を実行するxgb.cv() を実行するxgb.cv()$evaluation_log:各ラウンドの推定 RMSE を記録xgb.cv() を実行するxgb.cv()$evaluation_log:各ラウンドの推定 RMSE を記録xgboost() を実行し、nrounds = $n_{best}$ と設定するまずデータを前処理する
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$cntcv <- 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:個々の木の最大深さnfold(xgb.cv() のみ):交差検証の分割数
elog <- as.data.frame(cv$evaluation_log)
(nrounds <- which.min(elog$test_rmse_mean))
78
nrounds <- 78
model <- xgboost(data = as.matrix(bikesJan.treat),
label = bikesJan$cnt,
nrounds = nrounds,
objective = "reg:squarederror",
eta = 0.3,
max_depth = 6)
2月のデータを前処理し、予測を行う
bikesFeb.treat <- prepare(treatplan, bikesFeb, varRestriction = newvars)
bikesFeb$pred <- predict(model, as.matrix(bikesFeb.treat))
2月データにおけるモデル性能
| モデル | RMSE |
|---|---|
| 準ポアソン | 69.3 |
| ランダムフォレスト | 67.15 |
| 勾配ブースティング | 54.0 |
予測値と実際の自転車レンタル数(2月)

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

R による Supervised Learning:回帰