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]
    1. 学習候補から サイズ n_train の学習データを取り出す。
    2. パラメタ値ごとに学習データ内で交差検証を行い最適な n_estimators を決定する
    3. 上で求めた n_estimators を用い学習データ全体でモデルを作る(seedを変えながら3回)
    4. 上のモデルでテストデータの予測をしスコア (log_loss) を計算する

結果

一応 6.4-12.8 あたりが最適です。
より詳細な分析をするためには、学習データを取り出す回数を増やし、
モデルに含まれる決定木の複雑さ(葉の数)とウェイトの分布を調べる必要がありそうです。