始める無料で始める

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_meantest_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)
コードを編集して実行