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している点は動画と異なる)

f:id:copypaste_ds:20190905001816p:plain
GBDTのアルゴリズムwikipediaより)

Boosting algorithm: GBM - Towards Data Science

アルゴリズムの概要からsklearnのsource codeの説明までほどよくまとまっている。
復習時に参照することも多く、個人的に好きなサイト。

XGBoost

日本語の記事が充実している。日本語記事で概要を把握してから論文を読むのが良さそう。

日本語の記事

いずれの記事もわかりやすくまとまっている。(調べれば他にもわかりやすい記事が見つかる)

「目的関数に正則化項を加える」、「二次のテイラー展開で近似する」とか言われてもビビらなくなる。

f:id:copypaste_ds:20190905003927p:plain f:id:copypaste_ds:20190905003942p:plain

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の違いなどが整理できる。

f:id:copypaste_ds:20190905005141p:plain f:id:copypaste_ds:20190905005149p:plain

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のわかりやすい解説もある。

f:id:copypaste_ds:20190905104035p:plain

LightGBM and XGBoost Explained | Machine Learning Explained

XGBoost, LightGBM 独自の工夫に関して簡単な説明がある。
下記の用語を聞いてもビビらなくなる。

  • Level-wise growth strategy, Leaf-wise growth strategy
  • Histogram-based method
  • Ignoring sparce inputs

f:id:copypaste_ds:20190905111521p:plain

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

f:id:copypaste_ds:20190905114352p:plain

f:id:copypaste_ds:20190905114401p:plain

なぜCatboostの推論は速いの? - 簡単なレポート

Symmetric treeと推論時間に関して説明がある。

f:id:copypaste_ds:20190905121126p:plain

このtweetが理解の助けになりました。

[1706.09516] CatBoost: unbiased boosting with categorical features

元論文

Parameter

公式ドキュメント

ドキュメントを読もう。(自戒)

勾配ブースティングで大事なパラメータの気持ち - 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の実践テクニックが紹介されている。

f:id:copypaste_ds:20190905141112p:plain

PLAsTiCC 3rd Place Solution - Speaker Deck

カテゴリ変数が少ない場合にCatBoostが効果的だった例が紹介されている。

f:id:copypaste_ds:20190905141640p:plain

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を用いた特徴量抽出テクニックが紹介されている。