Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20190413 xgboost lightgbm

35 views

Published on

第2回AIジョブカレ勉強会
part1 XGBoost, LightGBM -最適な分割の見つけ方-

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

20190413 xgboost lightgbm

  1. 1. 2019 Edge consulting Inc. All Rights Reserved XGBoost, LightGBM - 最適な分割の見つけ方 - 2019年4月13日 ジョブカレ勉強会 エッジコンサルティング株式会社 永田 絢香
  2. 2. 2019 Edge consulting Inc. All Rights Reserved 1. 本日取扱うモデルについて(背景) 2. XGBoostにおける 最適化アルゴリズム 3. ヒストグラムベースアルゴリズム 4. GOSS, EFB 5. 実装とパラメータ 本日のアジェンダ
  3. 3. 2019 Edge consulting Inc. All Rights Reserved 1. 本日取扱うモデルについて(背景) 2. XGBoostにおける 最適化アルゴリズム 3. ヒストグラムベースアルゴリズム 4. GOSS, EFB 5. 実装とパラメータ 本日のアジェンダ
  4. 4. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 1. 本日取扱うモデルについて • XGBoost(2014年~) • LightGBM(2016年~) 製 どちらも分析コンペ ”Kaggle” でよく使われている人気のアルゴリズム Decision Tree Bagging model Boosting model XGBoost LightGBMGBDT Random Forest 決定木 並列型 直列型
  5. 5. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 1. 本日取り扱うモデルについて • GBDT(Gradient Boosting Decision Tree) inputs fitting (決定木) weight (誤差関数) end 勾配との 誤差算出 重みとして 再学習 ・ ・ ・ M回 繰り返し M本の木ができる 勾配算出 誤差を最小限にす るρt を算出 参考文献[1]
  6. 6. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 1. GBDTの課題 • 勾配によって綿密に修正を繰り返しながら、正解に近づいていくモデル GBDTの主なコストは、決定木の学習にあります。決定木の学習で最も時間がかかるの は、最適な分割点を見つけることです。 参考文献[4]
  7. 7. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 1. GBDTの課題 • GBDT(Gradient Boosting Decision Tree) inputs fitting (決定木) weight (誤差関数) end ・ ・ ・ 外側のアルゴリズムはいい感じだけど・・・ ? どうしたら良い決定木の構造(分割)が 効率よくできるのか、が課題だった! 直列型という特性上、更に遅い!
  8. 8. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • XGBoostで取り入れられた GBDTの概念 [ ロス関数 + 正則化項 ]による、モデルの最適化 K本の木があると仮定したときのモデル 目的関数 損失関数 正則化項 決定木 森
  9. 9. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 参考:正則化 AIジョブカレ_機械学習入門_P02_教師あり学習(回帰).pptx
  10. 10. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved ※ここからのお話の方針(ちょっと数式が多めです) 目的関数 を式変形していきます 1.Boosting モデルとして考えるため 2.勾配を用いたモデルとして考えるため 3.重み(w)を求めるため 凡例: 式変形 , 関数の定義 2. XGBoostにおける 最適化アルゴリズム
  11. 11. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • 目的関数の式変形① Boostingの要素を入れる 目的関数に代入 Boosting(直列型) Boosting一般式 0個目の決定木が出した答え 1個目の決定木が出した答え 2個目の決定木が出した答え 代入
  12. 12. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • 目的関数の式変形② 損失関数l の和を、残差の平方和として変形する ※ constant: 定数項 計算上不要なためまとめて 記載されることが多い 残差の平方和: l 2次関数式展開 残差の平方和に置き換え
  13. 13. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • 目的関数の式変形③ 近似+勾配関数gi、hi の定義 テイラー展開(近似) 近似(イコールではない) 一次微分 二次微分 一次微分関数 二次微分関数 定義する “ ” を変数にとる関数 f(x)として近似
  14. 14. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • 木のモデルの定義、正則化項の定義、となぜ行うか? ・ q は、各特徴量dにおける木の構造 ・wq(x) は、サンプルx の各決定木T における、特徴量d における構造qを持ったウェイト ・ w は、各決定木Tにおける最終ウェイト ・ 正則化項はwを使って表すことができる(一般的) 木のモデルの定義 正則化項の定義
  15. 15. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • 目的関数の式変形④ wを使った式への変形 前ページの定義 代入 定数項を除く
  16. 16. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • 目的関数の式変形⑤ Gj、Hj を使った式へ変形 gi とhi の総計をGj とHj と定義 代入 目的関数は、重みwj の2次関数となる。 ある決定木Tにおける重みwj を、Gj、Hjを用いて表すと・・・
  17. 17. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • Tを固定して考えると = 0 2次関数の解 のとき ここだけ使う
  18. 18. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • 最適な重み、目的関数の定義 重みwj を、Gj、Hj を用いて表す ※定数等を除いて近似しているため*がついている 目的関数もGj、Hjを用いて表すことができる (各葉jにおける最適な重み) 最小化(最適化)したい!
  19. 19. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • 最適な分割点を求めるアルゴリズム • データセット I • 特徴量 d • ノード(分割ポイント) k • サンプル数 i • 分割後の関数(L+R)が大きければ、うまく分かれていることになる 左側Lの 最適化関数 右側Rの 最適化関数 分割前の 最適化関数 参考文献[2]
  20. 20. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 2. XGBoostにおける 最適化アルゴリズム • まとめ inputs fitting (決定木) weight (誤差関数) end ・ ・ ・ 正則化項を含めた最適化関数 から最適な分割 を決めるモデル +誤差 +誤差 最適化 最適化 最適化 最適化 最適化 w w w w 最適化 最適化+誤差
  21. 21. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 3. ヒストグラムベースアルゴリズム • 最適なポイントで分割するアルゴリズムは見つかった。 しかし… Exact Greedy Algorithm(貪欲法)には 遅い という致命的な欠点があった 遅くなってしまう理由は分割前の sorted(並替え)にある。 一般的にこのアルゴリズムを Pre-sorted Algorithm (事前並替え)と呼ぶ 遅いポイント 参考文献[2]
  22. 22. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 3. ヒストグラムベースアルゴリズム • Pre-sorted Algorithmは、なぜ遅いのか? 例えば、10,000人分の顧客データがあったとする。 → まず「1.年齢」で分割するときの最適な分割点を決めたい。 → “Pre-sorted Algorithm”では、まず10,000人分の顧客を「1.年齢」の若い順に並び替える。 → 適切な分割点を1歳ごとに探っていく。 → 「1.年齢」の最適分割点は40歳だった。 → 次は「2.購買金額」の最適分割点を決めたい。 → 「2.購買金額」の低い順に・・・ → ・・・ (全ての特徴量dで繰り返し) • 分割のたびにデータの並び替えが発生 • 最適なポイントの検索を最小単位で行っている
  23. 23. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 3. ヒストグラムベースアルゴリズム • そのため、XGBoostでは 近似アルゴリズム(Algorithm2)や 列ブロック構造(fig1)を使って 並べ替えアルゴリズムの効率の悪さを 回避する策がとられている ←特徴量を並び替えた状態で固定しておく 分割のたびに並び替えをしない ↑特徴量k の百分位点Sk を取得 取得した分位点毎に勾配G、H を算出する ※ただし精度が落ちるという欠点がある fig1. 参考文献[2] 参考文献[2]
  24. 24. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 3. ヒストグラムベースアルゴリズム • LightGBMで登場した「Histogram-Based Algorithm」 このアルゴリズム(Pre-sorted Algorithm)は単純で最適な分割点を見つけることができますが、 トレーニング速度とメモリ消費の両方において非効率的です。… ヒストグラムベースのアルゴリズムは、メモリ消費量とトレーニング速度の両方でより効率的で あるため、私たちはそれに基づいて行っていきます。 参考文献[4]
  25. 25. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 3. ヒストグラムベースアルゴリズム • LightGBMで登場した「Histogram-Based Algorithm」 XGBoostでも実装可能! 2017年1月にXGBoostの新機能として 発表されている LightGBMは2016年12月に発表された らしいので、その1ヵ月後には追加とは 仕事が早い笑 論文はそれ以降に出たので 「XGBoost supports both the pre-sorted algorithm and histogram-based algorithm.」 となってしまっている https://github.com/dmlc/xgboost/issues/1950
  26. 26. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 3. ヒストグラムベースアルゴリズム • ヒストグラムベースアルゴリズム ソートされた特徴値上の分割点を見つける代わりに 連続特徴値を別々のbinにまとめ、学習中にこれらのbinを 使用して特徴ヒストグラムを構築して、最適な分割点を 見つけるアルゴリズム (引用:LightGBM論文より) • binとは? ヒストグラムのグラフの幅のこと bin分割データを作成することをbinningという bin分割 参考文献[4]
  27. 27. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 3. ヒストグラムベースアルゴリズム • Binning実装 http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2018/py-ml/py-ml-fujii-0525.pdf 参考文献[5]
  28. 28. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 3. ヒストグラムベースアルゴリズム • Histogram-Based Algorithmだとどうなるか? 例えば、10,000人分の顧客データがあったとする。 → まず「1.年齢」で分割するときの最適な分割点を決めたい。 → “Histogram-Based Algorithm”では、まず10,000人分の顧客を5歳単位で区切ったbinにまとめる。 → 適切な分割点を5歳ごとに探っていく。 → 「1.年齢」の最適分割点は40歳だった。 → 次は「2.購買金額」の最適分割点を決めたい。 → 「2.購買金額」1,000円単位で区切ったbinにまとめる。 → ・・・ (全ての特徴量dで繰り返し) • 分割のたびにデータの並び替え不要 • 最適なポイントの検索をbin単位で行っている
  29. 29. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 4. GOSS, EFB • GOSSとEFBはLightGBMにのみ実装されているさらなる高速化の仕組み • GOSS:Gradient-based One-Side Sampling 勾配ベースの片側サンプリング ⇒ 行単位でデータサイズを減らすアルゴリズム • EFB:Exclusive Feature Bundling 排他的な特徴量バンドリング ⇒ 列単位でデータサイズを減らすアルゴリズム
  30. 30. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 5. 実装とパラメータ • XGBoost編 • max_depth [default=6] 木の深さ。大きすぎると過学習になりやすく、スピードも遅くなる。 XGBoostの場合3~10くらいがよいらしい。 • min_child_weight [default=1] インスタンスの重みの合計がmin_child_weight以下になった場合、それ以降の 分割は起こらない。大きいほど、アルゴリズムは保守的になり過学習を防ぐ。 • gamma [default=1] 設定すると、木の数が増えるごとにペナルティが増えていく。 • subsample [default=1] ランダムサンプリングを行う比率。サンプリングは、ブースティングの反復ごとに 1回行われる。0.5~0.9がよく設定される。 参考文献[6]
  31. 31. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 5. 実装とパラメータ • LightGBM編 • num_leaves [default = 31] 葉の数。ツリーモデルの複雑さを制御するための主なパラメータとされている。 理論的にはnum_leaves = 2^(max_depth)となり、深さ方向の木と同じ数の葉を取得する ように設定する。 ※ ただし、この変換は必ずしもうまく機能するわけではない。効率のいい葉を成長させようとする あまり、無制限の深さまで成長する可能性がある。調整の際は、num_leavesを2^(max_depth) より小さくするとよい。 • min_data_in_leaf [default = 20] 過学習を防ぐための非常に重要なパラメータ。その最適値はトレーニングサンプルの数と num_leavesに依存する。大きな値に設定すると、木が深くなり過ぎるのを防ぐことが可能。 大規模なデータセットには数百または数千に設定すると良い。 • max_depth [default = -1] 木の深さ。<0は、制限を設けないことを示す。 • max_bin [default = 255] ビンの数。少ないと速度が上がるが、多ければ精度が上がる。 参考文献[7]
  32. 32. © Basic Inc. All Rights Reserved. 2019 Edge consulting Inc. All Rights Reserved 参考文献 [1] Gradient Boosting論文: https://statweb.stanford.edu/~jhf/ftp/trebst.pdf [2] XGBoost論文: https://arxiv.org/pdf/1603.02754.pdf [3] XGBooost理論、数式: https://homes.cs.Washington.edu/~tqchen/pdf/BoostedTree.pdf [4] LightGBM論文: https://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision- tree.pdf [5] Binning実装: http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2018/py-ml/py-ml-fujii-0525.pdf [6] XGBoost実装: https://github.com/dmlc/xgboost https://xgboost.readthedocs.io/en/latest/tutorials/param_tuning.html [7] LightGBM実装: https://github.com/Microsoft/LightGBM/blob/master/docs/Parameters-Tuning.rst

×