XGBoost の lambda について
XGBoost のパラメタ lambda に関する実験を行いました。
学習データサイズを変えながら lambda の最適値を調べています。
今回使うデータはUCI Machine Learning Repository: Covertype Data Setです。
データ数 | 特徴数 | タスク | クラス数 |
---|---|---|---|
581012 | 54 | 多値分類 | 7 |
データサイズ
- テストデータサイズ: 100k
- n_train (学習データサイズ): [10k, 20k, 40k]
データは Stratified で分割しているので、きっちり10k, 20k とはなってないです。
XGBoost のパラメタ
- lambda: [0.4, 0.8, 1.6, 3.2, 6.4, 12.8, 25.6, 51.2]
- max_depth: 10, subsample: 0.8
上記以外のパラメタはデフォルト値です。
以下は疑似コードです。実際のコードはGitHub - tks0123456789/XGB_experiments
データを学習候補とテストに分割する(テストデータは固定)
- for n_train in [10k, 20k, 40k]
- 学習候補から サイズ n_train の学習データを取り出す。
- パラメタ値ごとに学習データ内で交差検証を行い最適な n_estimators を決定する
- 上で求めた n_estimators を用い学習データ全体でモデルを作る(seedを変えながら3回)
- 上のモデルでテストデータの予測をしスコア (log_loss) を計算する
一応 6.4-12.8 あたりが最適です。
より詳細な分析をするためには、学習データを取り出す回数を増やし、
モデルに含まれる決定木の複雑さ(葉の数)とウェイトの分布を調べる必要がありそうです。