勾配ブースティングについて、勉強したくていろいろ情報を集めながら、実際にコーディングしました。
Kaggleでもディープラーニングより、XGBoostやLightGBMなどの勾配ブースティングを使ったアルゴリズムで高い精度が出るケースが多いという話もあり、これを学ぶといろんな場面で使えそうです。
とりあえず、非エンジニアでも「とりあえず概要をざっくり理解しつつ、触ってみよう」を目標にします。
GBDTの基礎知識
勾配ブースティング(Gradient Boosting)は、弱学習器を組み合わせたアンサンブル学習のひとつで、それを決定木系で実現したのがGBDT(Gradient Boosting Decision Tree)です。
調べてみると、日本語の情報が充実していない印象もありますが、こちらのコンテンツを読むと良いと思います。
勾配ブースティングについてざっくりと説明する – About connecting the dots.
GBDTの理解に役立つサイトまとめ – copypasteの日記
英語にはなりますが、こちらのYouTube動画が非常にわかりやすかったです。丁寧に簡単の例を交えながら、GBDTについて説明してくれます。
XGBoostとLightGBMのインストール方法
実際にPython環境にインストールしてみましょう。自分の場合は、WindowsのAnaconda環境なのでその前提です。こちらのコマンドで、簡単に導入することができます。
conda install -c conda-forge xgboost
conda install -c conda-forge lightgbm
こちらの記事を参考にさせていただきました。
LightGBM/XGBoostをAnaconda経由で簡単にインストールする方法 – Qiita
データの前処理
直接的にGBDTと関係あるわけではないですが、構造化データの前処理として必要なことも書いておきます。
前処理全般という意味では、こちらが大変参考になりました。
モデリングのための特徴量の前処理について整理した – For Your ISHIO Blog
こちらは、決定木系でOne-Hot Encodingが必要かどうかを調べたときに、参考にさせていただいた記事です。
カテゴリカル変数はなんでもダミー変換すればよいのか?-アルゴリズムに応じたOne Hot EncodingとLabel Encodingの使い分け | キヨシの命題
ハイパーパラメータのチューニング
PythonでXGBoostやLightGBMを使うまでは比較的簡単だったのですが、その後のパラメータチューニングに一番時間をかけました。
XGboostのハイパーパラメータチューニング
XGBoostのハイパーパラメータの種類はこちらで確認。
Kaggleで大人気!XGBoostに関する備忘録 – Qiita
ハイパーパラメータのうち、重要度が高いパラメータからどう順序立ててチューニング進めていくのか、サンプルで示してくれています。
analytics_vidhya/XGBoost models.ipynb at master · aarshayj/analytics_vidhya · GitHub
LightGBMのハイパーパラメータチューニング
LightGBMのハイパーパラメータの種類をこちらで確認。XGBoostとの対比もあるのでわかりやすいです。
【機械学習】ハイパーパラメータチューニングの仕方 – Qiita
こちらは、インストール方法から丁寧に解説されていますが、特にハイパーパラメータの種類と特徴、目的に応じてどう調整するのかまで書かれています。
LightGBM 徹底入門 – LightGBMの使い方や仕組み、XGBoostとの違いについて
こんな感じでとりあえず、調べながらコーディングして、動かすところまで行けました。あと、ハイパーパラメータのチューニングは、結構難しいですね。
PFNのOptunaを使ってみるとか、そもそもの前処理での特徴量の作り方とか、いろいろ試してみる余地がありそうな気がしました。こういうチューニングの勘所が最短距離で作れるようになるって、もっと知識と経験が必要だなと思いました。
Optunaを使ってXGBoostのハイパーパラメータチューニングをやってみる
Python: Optuna の LightGBMTuner で Stepwise Tuning を試す – CUBE SUGAR CONTAINER