Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dive into XGBoost

Maxwell
May 23, 2018

Dive into XGBoost

A naive explanation of Boosting family including XGBoost.
Please let me know if you find something wrong or have a question.

Updated: Jul.2022

Maxwell

May 23, 2018
Tweet

More Decks by Maxwell

Other Decks in Science

Transcript

  1. XGBoost とは? 「 Boosting Tree algorithm 」の一種で, Kaggleで現在(2018年時点)最も使われているモデルの1 つ. 構造化データに対して,最高峰の精度を誇り,

    計算速度をあげるべく色々な工夫が施されている. 開発元は、DMLC (Distributed Machine Learning Community) https://github.com/dmlc
  2. Github: https://github.com/dmlc/xgboost R package Python package 是非,使ってみましょう! R や Python

    用の wrapper package が提 供されている C ++ などの開発言語に不慣れでも 安心して使用することができる R であれば > install.packages('xgboost') で一発でインストール可能
  3. y = 0.3x4 − 1.5x3 + 1.2x2 + 1.5xで表される多項式にガウシアンノイズを加えた後, サンプリングしたデータに対し,多項式をフィッティングすることを考える

    多項式の最大の次数は 4 次であるが,正解の式を知らない場合,その次数も含めて推定 しなければならない(高次の方が表現力が高く,あてはまりはよくなる) Gaussian Noise ( ~ N(0, 0.72) ) を付加 最大次数が 3, 4, 6, 9 次 とした場合に, 各フィッティング結果を「学習データ」と「検証データ」の両方に対して検証
  4. 基礎知識 1: Bias と Variance モデルの学習(フィッティング)において 期待二乗損失関数 L を使用し多項式の係数を求めるとすると, L

    = y x − t 2 p x, t dx dt この期待二乗損失関数は,以下の形に分解できる L = ED y x; D − h x 2 p x dx + ED y x; D − ED y x;D 2 p x dx + h x − t 2p x, t dx dt 1 2 3 bias2 variance noise 但し,この式における ED ∙ とは, データの取り方 D に関して期待値をとったもの x : 特徴量 t : 目的変数 y(x) : モデルによる予測値 p(x, t) : 特徴量と目的変数の同時分布 h(x) : 理想的な回帰関数(最良の予測,神業的予測) データの取り方に対しての予測値の期待 値が,理想的な予測値からどれだけ乖離 しているかを表したもの 各データの取り方に対しての予測値 が, 期待値からどれだけ変動するかを表し たもの 予測したい事象に含まれる本質的なノ イズで,理想的なモデルでも除去しき れない誤差 1 2 3
  5. bias^2 variance poly 3 0.0463 0.0019 poly 4 0.0003 0.0019

    poly 6 0.0003 0.0028 poly 9 0.0005 0.0041 bias と variance モデルの自由度(表現 力)が高くなると, bias が低くなり, variance が大きくなる bias と variance を バランスよく小さくす るモデル が予測性能の 意味で最適なモデル (testの結果が良い)
  6. 1. MSEでみると,学習データ( train )では,9 次の多項式のあてはまり具合が一番良い 2. しかし,検証データ( test )では,正解である 4

    次の多項式が一番良い この時,6 次と 9 次の多項式は,「 過学習している 」ことになる 基礎知識 2: 過学習(Overfitting)
  7. 基礎知識 3: 決定木(Decision Tree) 二値分類: ▲ と ▪ を X1

    と X2 で分類するタスク X 1 >= 10 X 1 < 10 X 2 <= 7 X 2 > 7 Train ACC : 95% 8 5 1 6 5 0 1 14 予測 観測 X 1 10 7 : 6 : 14 X 2 ( X 1 , X 2 ) = ( 3.9, 9.1 ) 過学習していない木 (深さ 2) X 1 <= 4 X 1 > 4 3 1 3 X 2 <= 9 X 2 > 9 1 1 2 X 2 <= 10 X 2 > 10 1 1 過学習した木 (深さ 5) 6 0 0 14 予測 観測 Train ACC : 100%  非線形な境界を描くように特徴量をあつかえる  際限なく深い木にすることで,学習データに対し て 100% の精度にすることができるが,過学習す ることが多い(例: 右図深さ5の場合) 決定木は学習データに対する精度を幾らでも 良くすることができるため,バイアスは低い が,バリアンスは大きい 9 10
  8. X から y を予測(分類・回帰)する問題に対して,データを M 通 りサンプリング(ブートストラップ)し,それぞれに対して同一の モデル(例えば,決定木)をあてはめることを考える M :

    モデルの数(ブートストラップの回数) ym (X) : 各モデル(弱学習器と呼ぶ)の予測関数 h(X) : 予測しようとする事象に対する最適な「真の予測関数」 εm (X) : モデルが正確でないことに起因する誤差関数 yM X = 1 M m=1 M ym (X) ym X = h X + εm (X) Breiman L. Bagging predictors. Mach Learn. 1996;24:123–40. Prediction: yM X Bootstrap 弱学習器 week learner Raw Training Data Sampled Data Bagging(Bootstrap aggregating)
  9. E ym X − h(X) 2 = V εm X

    = σ2 V yM X = 1 M2 m=1 M V εm X = σ2 M < σ2 ここで,簡単のために,誤差の平均が 0,分散が同一値(σ2)かつ互いに無 相関であるとすれば,入力データ X の分布に対する期待二乗和誤差に対して, となる( 但し,E[ ] はデータXの分布に対しての期待値 ) このことは,複数の弱学習器の予測値を平均することで予測値のばらつきを低減できる ことを表している 但し,上記は,モデルの誤差が無相関であるこということを仮定しているため, 厳密にはなりたたない(似たようなモデル間の誤差には必ず相関がある). そのため,上記ほどには予測値の平均のばらつきを低減することはできない. とはいえ,baggingを行うことで一定の効果が得られるは保証されている. yM X = 1 M m=1 M ym (X) ym X = h X + εm (X) 前頁の式をもう一度書くと・・・ であった
  10. Random Forest 1. 弱学習器として,複雑な相互作用関係をとらえることのできる決定木を採用 バイアスは小さいが、バリアンスが大きい決定木をbaggingすることで,精度の向上が期待でき る.過学習は木の成長のさせ方などでも抑制 2. 各決定木の学習の際,元データからbootstrapping(復元抽出)で学習用データをサンプリングし, これを使って決定木の学習を行う 3.

    学習させた複数個( 一般的には,数百 ~ 数千個 )の決定木の予測値を平均したものを予測値とす る 4. 決定木における枝分かれの際に,全ての特徴量を使用するのではなく,全特徴量の一部をランダム サンプルし,枝の分岐に使用する これにより,各決定木間の相関を低減させることができ,予測値(各決定木の平均)の分散の低減 を可能にしている 5. 以上は,最もベーシックな Random Forest の特徴だが,これら以外にも色々な工夫が施された亜 種がたくさん存在する e.g. Extremely Randomized Forest: https://scikit-learn.org/stable/modules/ensemble.html#extremely-randomized-trees Breiman L. Random Forests. Machine Learning. 2001;45:5–32.
  11. ~ 1997 ~ 2000 ~ 2006 ~ 2016 ~ 2019

    AdaBoost. M1 (Classification task) AdaBoost. M1 (Regression task) Gradient Boosting Tree Extreme Gradient Boosting What’s Next? Timeline of Boosting LightGBM CatBoost ここでは,XGBoost に至るまでの Boosting の開発の流 れをアルゴリズムの視 点で追いかける
  12. AdaBoost ( AdaBoost.M1 ) 分類問題: Freund Y, Schapire RE. A

    Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting. Journal of Computer and System Sciences. 1997;55:119–39. 回帰問題: Friedman JH. Greedy Function Approximation: A Gradient Boosting Machine. The Annals of Statistics. 2001;29:1189–232. yM (X) = 1 M m=1 M ym (X) ym X = h X + εm (X) yM (X) = m=1 M ωm Zm (X) Zm X = h X + εm (X) Random Forest AdaBoost. M1 1. 各弱学習器に対して重みが異なる! 2. 各弱学習器の学習は独立には行われず,連続的に行われる点がRandom Forestと大きく異なる
  13. データは n = 1, … , N 個あり,それぞれが重み係数 ωn をもつ

    弱学習器である決定木は m = 1, … , M 個あり,m + 1 番目 の決定木は m 番目の学習が終わってから,学習を開始する ことになる.各弱学習器は,最終予測値にそれぞれ αm の 重みで寄与する. 2-class分類問題で,クラスのラベルは tn = −1 or 1 次頁の内容の前提 ※・・・決定木の分割の仕方などのお話は しません.右のカステラなどを参考にして ください. カステラって,英語では Castellaって書くらしいよ!
  14. 1. n = 1, … , N のデータの重み ωn の初期化

    ωn (1) = 1 N ( 上添え字 (1) は最初の決定木であることを示す) 2. m = 1, … , M について以下を「順に」行う ( a ) 弱学習器 Zm (X) を誤差関数 Jm を 最小化するようにフィッティング Jm = n=1 N ωn (m) I Zm (Xn ) ≠ tn I Zm (Xn ) ≠ tn は指示関数 括弧内が成立する時に 1,それ以外では 0 3. ( b ) m 番目の学習器の重み αm を求める εm = Jm n=1 N ωn (m) αm = ln 1−εm εm ( c ) データ点の重み係数を更新する ωn (m+1) = ωn (m)exp αm I Zm (Xn ) ≠ tn 4. 左図の下式で最終モデルの予測を計算する データ n の重みは ωn ωn (1) ωn (2) ωn (3) ωn (M) Z1 (X) Z2 (X) Z3 (X) ZM (X) YM X = sign m=1 M αm Zm (X) AdaBoost. M1 のアルゴリズム 1 2 3 M α1 α2 α3 prediction
  15. AdaBoost .M1 のアルゴリズム : 補足 1. AdaBoost. M1 アルゴリズムは, より一般的な「前向き段階的加法的モデリング」の一例として考えることができる

    2. 「前向き段階的加法的モデリング」とは m 番目の弱学習器(木) Zm (X) とその木の重み βm を更新する際に Zm X , βm = argmin n=1 N L tn , fm−1 X + β Z X β Z X : m 番目の決定木の予測値 L . : 損失関数 fm−1 (X) : fm−1 (X) = i=1 m−1 βi Zi (X) としたもの 3. AdaBoost .M1 は,損失関数として指数損失を用いたものと等価(αm = 2βm ) 4. 回帰問題に対しては,例えば二乗誤差などが考えられる 𝑍 𝑋 , 𝛽
  16. Gradient Boosting Tree (AdaBoost からの改良点の要点のみ記した) 1. 損失関数 𝐿 ∙ が微分可能である時

    𝐿 𝑡𝑖 , 𝑓𝑚 𝑋𝑖 = 𝐿 𝑡𝑖 , 𝑓𝑚−1 𝑋𝑖 + 𝜕 𝐿 𝑡𝑖 , 𝑓𝑚−1 𝑋𝑖 𝜕 𝑓𝑚−1 𝑋𝑖 𝑓𝑚 𝑋𝑖 − 𝑓𝑚−1 𝑋𝑖 と近似できることを利用して, 損失関数の 𝑚 − 1 時点における 𝑖 = 1, … , 𝑁 の各データ点の負の勾配値 −𝑔𝑖𝑚 = − 𝜕 𝐿 𝑡𝑖 , 𝑓𝑚−1 𝑋𝑖 𝜕 𝑓𝑚−1 𝑋𝑖 に 𝑚 番目の決定木の予測値が近づくように 時点 𝑚 における決定木の構造(分割点、分割終端ノードの各予測値)を決める 2. 例えば,損失関数 𝐿 ∙ が 最小二乗損失 である時, −𝑔𝑖𝑚 = − 𝜕 𝐿 𝑡𝑖 , 𝑓𝑚−1 𝑋𝑖 𝜕 𝑓𝑚−1 𝑋𝑖 = − 𝜕 1 2 𝑡𝑖 − 𝑓𝑚−1 𝑋𝑖 2 𝜕 𝑓𝑚−1 𝑋𝑖 = 𝑡𝑖 − 𝑓𝑚−1 𝑋𝑖 と,𝑚 − 1 時点での残差というシンプルな形になっている. つまり,𝑚 番目の決定木の予測値はこの残差に近づければよい. 𝑓 𝑚 ∙ の定義は前頁参照
  17. Extreme Gradient Boosting (GBTからの改良点の要点のみを記した) 1. 損失関数に正則化項を付加 下式の「前向き段階的加法的モデリング」を少し修正する Tm = argmin

    T n=1 N L tn , fm−1 X + T (但し,T は決定木の予測値) ここで,損失関数 L . を下記のように 正則化項 Ω T を含むように変更する n=1 N L tn , fm−1 X + Tm X + m=1 M Ω (Tm ) 正則化項 Ω T は決定木の構造に関連した L1 及び L2 正則化項をもつ 正則化項の採用により過学習を抑制
  18. 2. 勾配に加えてヘッシアン(2階微分)を考慮 GBM の時に考えた損失関数の展開形式を少し修正すると L ti , fm Xi =

    L ti , fm−1 Xi + 𝜕 L ti , fm−1 Xi 𝜕 fm−1 Xi fm Xi − fm−1 Xi + 1 2 𝜕2 L ti , fm−1 Xi 𝜕 fm−1 Xi 2 fm Xi − fm−1 Xi 2 と 2 次の項まで含めた式に修正できる これに前頁の正則化項を加えて,m 番目の決定木の構造を最適化す るための目標値を計算する ヘッシアンを含めた最適化により 計算速度が向上