勾配ブースティングのXGBoostやLightGBMを理解しつつ動かしてみる

勾配ブースティングについて、勉強したくていろいろ情報を集めながら、実際にコーディングしました。

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