Gradient Boosting Machine の木の本数を見つける
この演習では、天気、曜日や時間帯などを説明変数として、1時間あたりのレンタル自転車台数を予測するための Gradient Boosting モデルを作る準備をします。モデルは7月のデータで学習します。
7月のデータはあらかじめ読み込まれています。bikesJuly.treat には目的変数の列が含まれていないので、未処理データから取得してください:bikesJuly$cnt。
xgboost パッケージを使ってモデルを学習します。関数 xgb.cv()(docs)は、各木が追加されるたびに、交差検証で汎化誤差を推定します。最終モデルで使う適切な木の本数は、ホールドアウト RMSE が最小になる本数です。
この演習での xgb.cv() の主な引数は次のとおりです。
data: 数値行列。label: 目的変数のベクトル(数値)。nrounds: 最大ラウンド数(構築する木の本数)。nfold: 交差検証の分割数。5 が適切です。objective: 連続値の目的変数には"reg:squarederror"。eta: 学習率。max_depth: 木の最大深さ。early_stopping_rounds: 改善が見られないラウンド数に達したら学習を停止。verbose: 出力を抑えるにはFALSE。
この演習はコースの一部です
R による Supervised Learning:回帰
演習の手順
- 空欄を埋めて、処理済みの学習データに対して
xgb.cv()を実行し、出力を変数cvに代入してください。- データフレーム(処理済み)を行列に変換するために
as.matrix()を使います。 - ラウンドは 50、5-fold 交差検証を使います。
early_stopping_roundsは 5 に設定します。etaは 0.75、max_depthは 5 に設定します。
- データフレーム(処理済み)を行列に変換するために
cvからデータフレームevaluation_logを取得し、変数elogに代入してください。evaluation_logの各行は木が1本追加されたことに対応するので、行番号がモデル内の木の本数を表します。- 空欄を埋めて、列
train_rmse_meanとtest_rmse_meanの最小値に対応する木の本数を取得してください。which.min()(docs)は、ベクトル内の最小値のインデックスを返します。- 何本の木が必要でしょうか?
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Run xgb.cv
cv <- xgb.cv(data = ____,
label = ___,
nrounds = ___,
nfold = ___,
objective = "reg:squarederror",
eta = ___,
max_depth = ___,
early_stopping_rounds = ___,
verbose = FALSE # silent
)
# Get the evaluation log
elog <- ___
# Determine and print how many trees minimize training and test error
elog %>%
summarize(ntrees.train = ___, # find the index of min(train_rmse_mean)
ntrees.test = ___) # find the index of min(test_rmse_mean)