【Kaggle】タイタニックの振り返り#4-2 XGBoostのパラメータチューニング

今回はXGBoostのパラメータチューニングをGridSearchでやっていこうと思います。

▼タイタニック振り返り全体の流れ

#1 最低限の前処理+パラメータチューニングなしの3モデル+stratified-k-fold

#2 特徴量をいくつか追加投入

#3 RFEによる特徴選択を試みる

#4 モデルのパラメータチューニング

#5 アンサンブルその1:シンプルなブレンド

#6 アンサンブルその2:スタッキング

 

▼前3回の記事

【Kaggle】タイタニック振り返り#1 RandomForest vs XGBoost vs LightGBM

【Kaggle】タイタニック振り返り#2 特徴量エンジニアリング

【Kaggle】タイタニックの振り返り#3 RFECVで特徴選択

 

まずは前回のXGBoostと同じ状況を再現しておく

#3時点からスタートします。

・データ前処理、特徴量作成、RFEによる特徴選択が終わってXGBoostでモデルを作成した状況

XGBoostのパラメータについて

今回XGBoostでいじくるパラメータは以下の通りです。(scikit-learnを使って実装する場合)

max_depth : 決定木の最大の深さ。

learning_rate : 学習率

nestimators : 決定木の数

min_child_weight : 子ノードにおける最小重み。

gamma : 最低限の損失関数の減少を決める値。

subsample : トレーニングインスタンスのサブサンプル比

colsample_bytree : 各決定木を構築するさいの、列のサブサンプル比

reg_alpha : 重みに関するL1正則化項

reg_lambda : 重みに関するL2正則化項

(参考 : xgboost > python APIリファレンス )

 

パラメータチューニングの仕方については、以下のブログを参考にさせていただきました。

1.相対的に高い学習率を選択する。
一般的な学習率0.1はうまくいくが、ケースによっては0.05から0.3の間でもうまくいく。学習率を求めるために、クロスバリデーションによって最適な木の数を決定する。
2.木に関するパラメータをチューニングする。
固定された学習率や木の数のもとで、max_depth, min_child_weight, gamma, subsample, colsample_bytreeをチューニングする。
3.正則化パラメータをチューニングする。
lambda, alphaなどのパラメータをチューニングすることで、モデルの複雑さを減らし、パフォーマンスを高める。
ではグリッドサーチで探索していきます。

GridSearch

1.相対的に高い学習率の選択

まずは

・n_estimators

・learning_rate

をいじくります。

rangeをもうちょっと細かくして最適なものを探します。

learning_rate = 0.2

n_estimators = 70 で決定です。

スコアは0.845まで上がりました!

 

2.木に関するパラメータ

次に

max_depth, min_child_weight, gamma, subsample, colsample_bytree

をチューニングします。

一度にやると計算量がものすごくなってしまうので、2回に分けています。(本当は全部一緒にやったほうがよいはずです)

スコアは0.848まで上がりました!

 

3.正則化項

最後にreg_alpha,reg_lambdaをチューニングします。

正則化項に関しては、動かしてもスコアは変わりませんでした。

 

おわり

というわけで、

スタート時:0.8316056633753263

チューニング後:0.8484848484848485

と0.01以上のCVスコアの上昇がみられました。

GridSearchは時間がかかるので、ベイズ最適化なども勉強して試してみたいものです、、、

 

最後まで読んでいただきありがとうございました。