始める無料で始める

XGBoost での正則化の活用

ビデオで l1 正則化の例を見たので、ここでは l2 正則化ペナルティ("lambda" とも呼ばれます)を変化させ、Ames 住宅価格データセットにおけるモデル全体の性能への影響を確認します。

この演習はコースの一部です

XGBoost で学ぶ極限の勾配ブースティング

コースを見る

演習の手順

  • これまでと同様に、Xy から DMatrix を作成してください。
  • 初期パラメータ辞書を作成し、"objective""reg:squarederror""max_depth"3 を指定します。
  • for ループの中で xgb.cv() を使い、現在の l2 値(reg)を渡して "lambda" を体系的に変化させてください。
  • xgboost モデルのクロスバリデーションにおける最後のブースティングラウンドの "test-rmse-mean" を追加してください。
  • "Submit Answer" を押して結果を確認しましょう。どんな傾向が見られますか?

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Create the DMatrix: housing_dmatrix
housing_dmatrix = xgb.DMatrix(data=X, label=y)

reg_params = [1, 10, 100]

# Create the initial parameter dictionary for varying l2 strength: params
params = {"____":"____","____":____}

# Create an empty list for storing rmses as a function of l2 complexity
rmses_l2 = []

# Iterate over reg_params
for reg in reg_params:

    # Update l2 strength
    params["lambda"] = ____
    
    # Pass this updated param dictionary into cv
    cv_results_rmse = ____.____(dtrain=____, params=____, nfold=2, num_boost_round=5, metrics="rmse", as_pandas=True, seed=123)
    
    # Append best rmse (final round) to rmses_l2
    ____.____(____["____"].tail(1).values[0])

# Look at best rmse per l2 param
print("Best rmse as a function of l2:")
print(pd.DataFrame(list(zip(reg_params, rmses_l2)), columns=["l2", "rmse"]))
コードを編集して実行