GBDTの理解に役立つサイトまとめ
GBDTは分析コンペや業務で頻出しますが、アルゴリズムの詳細はパッケージごとに異なるため複雑です。できることなら公式ドキュメント・論文・実装を読み込みたいところですが、私の実力的にそれは厳しいので参考サイトをまとめておきます。ゆるふわ理解に留まっている自分用のメモです。
GBDT
Gradient Boosting Interactive Playground
トイデータを使ってGBDTの挙動を確認できる。しばらく遊べる。
YouTube
とてもわかりやすい解説動画。Part1~4を視聴すればアルゴリズムの基本が理解できる。
- Gradient Boost Part 1: Regression Main Ideas
- Gradient Boost Part 2: Regression Details
- Gradient Boost Part 3: Classification
- Gradient Boost Part 4: Classification Details
よく見る下図のようなアルゴリズムを見てもビビらなくなる。
(2-3でlinear searchしている点は動画と異なる)
Boosting algorithm: GBM - Towards Data Science
アルゴリズムの概要からsklearnのsource codeの説明までほどよくまとまっている。
復習時に参照することも多く、個人的に好きなサイト。
XGBoost
日本語の記事が充実している。日本語記事で概要を把握してから論文を読むのが良さそう。
日本語の記事
いずれの記事もわかりやすくまとまっている。(調べれば他にもわかりやすい記事が見つかる)
「目的関数に正則化項を加える」、「二次のテイラー展開で近似する」とか言われてもビビらなくなる。
Boosting algorithm: XGBoost - Towards Data Science
アルゴリズムの概要からGBDTとの違いまで簡潔にまとまっている。
Tree Boosting With XGBoost - Why Does XGBoost Win "Every" Machine Learning Competition?
GBDTとXGBoostのアルゴリズムを勉強したいときこれを読めば良さそう。
ただし100ページ程度あるので、ちょろっと復習したいときには不便かも。
Tree Boosting With XGBoost — Why Does XGBoost Win “Every” Machine Learning Competition?
上で紹介した100ページ程度ある内容の要点がまとまっている。
復習時に参照することも多く、個人的に好きなサイト。
Newton tree boostingとGradient tree boostingの違いなどが整理できる。
Introduction to Boosted Trees — xgboost 1.0.0-SNAPSHOT documentation
公式ドキュメント
[1603.02754] XGBoost: A Scalable Tree Boosting System
元論文
LightGBM
XGBoostに比べて解説記事が多くない。さっさと論文を読むのが理解の近道かも。
NIPS2017読み会 LightGBM: A Highly Efficient Gradient Boosting Decision T…
LightGBM = GBDT + GOSS + EFB だとわかる。 GOSS、EFBのわかりやすい解説もある。
LightGBM and XGBoost Explained | Machine Learning Explained
XGBoost, LightGBM 独自の工夫に関して簡単な説明がある。
下記の用語を聞いてもビビらなくなる。
Features — LightGBM 2.3.2 documentation
公式ドキュメント
カテゴリ変数の分割方法(エンコーディング方法)について説明がある。
The basic idea is to sort the categories according to the training objective at each split. More specifically, LightGBM sorts the histogram (for a categorical feature) according to its accumulated values (sum_gradient / sum_hessian) and then finds the best split on the sorted histogram.
LightGBM: A Highly Efficient Gradient Boosting Decision Tree
元論文
CatBoost
XGBoostに比べて解説記事が多くない。さっさと論文を読むのが理解の近道かも。
YouTube
入門者向けの解説動画。イメージが掴める。
What’s so special about CatBoost? - Hanish Sai Rohit Pallapothu - Medium
CatBoostの概要が説明されている。
Categorical Feature Combinationsの説明もある。(重要だけど論文内であまり目立たない)
『CatBoost: unbiased boosting with categorical features』at NeurIPS2018読み会 - Speaker Deck
以下の項目が説明されおり、CatBoostの特徴を把握できる。
- Target statistics (TS)
- Greedy TS
- Orderd TS
- Prediction shift
- Orderd boosting
なぜCatboostの推論は速いの? - 簡単なレポート
Symmetric treeと推論時間に関して説明がある。
このtweetが理解の助けになりました。
CatBoostのSymmetric Treeの図を見て一瞬何これと思ったけど、これは木というか全データに同じ条件式を適用する操作をn回やって、結果のn-bitをleaf indexにしてるだけなのか。なるほどそれは推論速いという感じ
— Nomi (@nyanp) 2019年7月10日
[1706.09516] CatBoost: unbiased boosting with categorical features
元論文
Parameter
公式ドキュメント
ドキュメントを読もう。(自戒)
- Parameters — LightGBM 2.3.2 documentation
- XGBoost Parameters — xgboost 1.0.0-SNAPSHOT documentation
- Python package training parameters - CatBoost. Documentation
勾配ブースティングで大事なパラメータの気持ち - nykergoto’s blog
大事なパラメータのお気持ちが紹介されている。
Laurae++: xgboost / LightGBM - Parameters
LightGBM, XGBoostのパラメメータの対応関係がまとめられている。
Implementation
Kaggle Days TokyoでのGBDT実装の話 - threecourse’s blog
threecourseさんのGBDT実装資料がまとめられている。
勾配ブースティングを実装してみた - nykergoto’s blog
nykergotoさんのGBDT実装が紹介されている。
xgboostのコードリーディング(その3) - threecourse’s blog
xgboostのコード解説がある。
Imputation Method
Imputation Strategy @ Kaggle Days Tokyo (Maxwell) - Speaker Deck
欠損の起こり方・欠損値補間手法・XGBoostにおける欠損処理・XGBoostによる検証実験が紹介されている。 検証実験は欠損値補完なし・欠損値補完あり(MICE)・欠損値補完あり(MICE)+欠損値フラグの3通り。
機械学習における欠損値補完について考える - rmizutaの日記
LightGBMで欠損補完なしと欠損補間手法を用いた場合の比較実験が紹介されている。
推論時の入力に未知の欠損値がある場合のlightgbmの挙動の確認 - rmizutaの日記
LightGBMで欠損のないデータで学習し欠損のあるデータで推論した場合の挙動が紹介されている。
lightgbm カテゴリカル変数と欠損値の扱いについて+α - てばさきさんの自由研究
カテゴリ変数と欠損値に関する検証実験が紹介されている。
- label encodingして入力するのと、カテゴリカル変数として入力する違い
- trainに存在しないが、testには存在するカテゴリの扱い
Categorical Encoding
How to encode categorical features for GBDT - Speaker Deck
エンコーディング手法の紹介と各種手法の比較実験が紹介されている。
Target Encoding はなぜ有効なのか - Speaker Deck
GBDT学習時におけるLabel EncodingとTarget Encodingの違いが紹介されている。
LightGBMを少し改造してみた ~カテゴリ変数の動的エンコード~
LightGBMのカテゴリエンコードを変更する方法が紹介されている。
Other
Santander Product RecommendationのアプローチとXGBoostの小ネタ - Speaker Deck
XGBoostの実践テクニックが紹介されている。
PLAsTiCC 3rd Place Solution - Speaker Deck
カテゴリ変数が少ない場合にCatBoostが効果的だった例が紹介されている。
Interpretable Machine Learning with XGBoost - Towards Data Science
SHAPの説明がある。詳しく知りたい場合は以下を参照。
LightGBMのcallbackを利用して学習履歴をロガー経由で出力する - 天色グラフィティ
LightGBMのcallbackでログ出力するスクリプトが紹介されている。
Python: LightGBM の学習率を動的に制御する - CUBE SUGAR CONTAINER
学習率を動的に変更させる方法と実験結果が紹介されている。
決定木は本当に変換に依存しないのか? - 天色グラフィティ
LightGBMは説明変数のスケーリングに対して本当に頑健なのかが検証されている。
Allstate Claims Severity | Kaggle
LossをMAEに設定したときの挙動について議論されている。
GBDTを使ったfeature transformationの適用例
GBDTを用いた特徴量抽出テクニックが紹介されている。