XGBoostにおける正則化とベース学習器

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

Sergey Fogelson

Head of Data Science, TelevisaUnivision

XGBoostにおける正則化

  • 正則化はモデルの複雑さを制御する
  • 精度が高く、かつシンプルなモデルが理想
  • XGBoostの正則化パラメータ:
    • gamma - 分割を許可する最小損失減少量
    • alpha - 葉の重みに対するL1正則化(値が大きいほど正則化が強い)
    • lambda - 葉の重みに対するL2正則化
XGBoost で学ぶ極限の勾配ブースティング

XGBoostにおけるL1正則化の例

import xgboost as xgb
import pandas as pd
boston_data = pd.read_csv("boston_data.csv")
X,y = boston_data.iloc[:,:-1],boston_data.iloc[:,-1]

boston_dmatrix = xgb.DMatrix(data=X,label=y) params={"objective":"reg:squarederror","max_depth":4}
l1_params = [1,10,100] rmses_l1=[]
for reg in l1_params: params["alpha"] = reg cv_results = xgb.cv(dtrain=boston_dmatrix, params=params,nfold=4, num_boost_round=10,metrics="rmse",as_pandas=True,seed=123) rmses_l1.append(cv_results["test-rmse-mean"].tail(1).values[0])
print("Best rmse as a function of l1:") print(pd.DataFrame(list(zip(l1_params,rmses_l1)), columns=["l1","rmse"]))
Best rmse as a function of l1:
        l1          rmse
    0    1  69572.517742
    1   10  73721.967141
    2  100  82312.312413
XGBoost で学ぶ極限の勾配ブースティング

XGBoostにおけるベース学習器

  • 線形ベース学習器:
    • 線形項の和
    • ブーストモデルは線形モデルの重み付き和(結果も線形)
    • ほとんど使われない
  • 木ベース学習器:
    • 決定木
    • ブーストモデルは決定木の重み付き和(非線形)
    • XGBoostでほぼ唯一使われる
XGBoost で学ぶ極限の勾配ブースティング

等長リストからDataFrameを作成する

  • pd.DataFrame(list(zip(list1,list2)),columns=["list1","list2"]))
  • zipは並列値のgeneratorを生成する:
    • zip([1,2,3],["a","b""c"]) = [1,"a"],[2,"b"],[3,"c"]
    • generatorsDataFrameで使う前に完全にインスタンス化する必要がある
  • list()でジェネレータを完全にインスタンス化し、DataFrameに渡すことで変換できる
XGBoost で学ぶ極限の勾配ブースティング

では、練習しましょう!

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

Preparing Video For Download...