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

XGBoostを数式で理解しようとするLT

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 XGBoostを数式で理解しようとするLT

Avatar for daidesukedonanika

daidesukedonanika

June 15, 2019
Tweet

More Decks by daidesukedonanika

Other Decks in Technology

Transcript

  1. © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. XGBoostを数式で理解しようと するLT

    発表者 兼城大(見習いデータサイエンティスト)
  2. 動機 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. ・XGBoostって響きがかっこいい

    ・何がeXtremeなんだ? ・Kaggle上位者が使ってるっぽい ・ハイパーパラメータたくさんでよくわからん ・LightGBMの方が流行っぽいぞ(小声) ・XGBoostの中身が知りたい そうだ!勉強しよう!!
  3. ざっくり掴むXGBoost 1/3 ・バイアス(Bias)とバリアンス(Variance) (ランダムフォレストとXGBoostのちがいを理解するために) © 2019 Chura DATA inc. PROPRIETARY

    & CONFIDENTIAL. #バイアス(Bias) →実際値と予測値との誤差の平均 (真の値とのずれ) #バリアンス(Variance) →予測値の散らばり度合い 例)②は高バイアス→未学習 ③は高バリアンス→過学習 ※バイアスとバリアンスはトレードオ フの関係にある
  4. ざっくり掴むXGBoost 2/3 ・バギングとブースティングの違い(ランダムフォレストとXGBoostのちがいを理解するために) © 2019 Chura DATA inc. PROPRIETARY &

    CONFIDENTIAL. #バギング → Bootstrap Aggregating(ブートストラップ 法を総計したもの)の略。 →バリアンスを減らす(過学習を防ぐ) →例)ランダムフォレスト(樹木モデルのバギング) #ブートストラップ法 →学習データを復元抽出でランダムに抽出 し、学習する。 #ブースティング →基本モデルの間違った予測に焦点を当てて、 「重み」を加味して次のモデルを改善する。 →バイアスを減らす(未学習を防ぐ) →例)XGBoost(樹木モデルのブースティング) ¥ 引用 https://www.codexa.net/what-is-ensemble-learning/ 引用 Géron, Aurélien. "Hands on Machine Learning with scikit-learn and Tensorflow." (2017)
  5. ざっくり掴むXGBoost ・XGBoostとは XGBoost(eXtreme Gradient Boosting)は、樹木モデルの勾配ブー スティングの実装の1つ。 © 2019 Chura DATA

    inc. PROPRIETARY & CONFIDENTIAL. XGBoostのモデル構築の仕組み (1)決定木を1つ作る。(ො y ) (2)1つ目の決定木の予測値と実測値の差をとる。 (誤差ε = - ො y ) (3)(2)の誤差ε を目的変数として、2つ目の 決定木を構築する。(誤差の予測値ෝ ε ) (4)(3)と(1)の和を取る。( ො y = ො y + ෝ ε ) (5)実測値 との差をとる。(誤差ε = - ො y ) (6)(5)の誤差を目的変数として、3つ目の決 定木を構築する。(誤差の予測値ෝ ε ) (7)これを繰り返してN本の決定木を作る。 ※(3),(6)を構築するアルゴリズムがミソ。 →どうやって誤差を予測する決定木t を作るの?? (1) (2) (3) (4) (5) (6)
  6. XGBoostを数式で理解しようとする1/7 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. ・決定木

    の作り方 min () ( ) = min σ =1 ( , ො (−1) + ( )) + + 1 2 損失関数 罰則項 (過学習を防ぐため) :t本目の決定木 :番目のデータ(個の説明変数) =( 1 , ⋯ , ), =1, ⋯ , :番目のデータの実測値( =1, ⋯ , ) ො (−1): ( − 1)本目までの決定木で作られた予測値 ただし、ො (0)=0, 1 = ො (1)とする。 :二乗誤差関数 (, )= − 2 :本目の決定木による予測誤差 = ෝ ε () ※誤差を目的変数にしている。 :Tの大きさに対するペナルティ :決定木を構築した時の最終ノードの数 : の大きさに対するペナルティ :決定木が返すことのできる値のベクトル 【損失関数】 【罰則項】 (次スライドのポイント) 前までの結果(t-1本目までの結果)を使って、 どのようにL() ( )を最小にする決定木 を 構築すれば良いか 2
  7. XGBoostを数式で理解しようとする2/7 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. ・決定木

    の作り方 (ステップ1)決定木 が 返すべき値∗を求める (ステップ2)ステップ1の∗をも とに、決定木 の分岐の仕方を決める min () ( ) = min σ =1 ( , ො (−1) + ( )) + + 1 2 2 3 ∗ 4 ∗ 2 ∗ 1 ∗ これで決定木 が作れる。 まさに、 eXtreme!
  8. min ෨ () ( ) = min σ =1 (

    − 2 ( −ො (−1) ) + ) + Ω( ) XGBoostを数式で理解しようとする3/7 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. (ステップ1)決定木 が返すべき値∗について min () ( ) = min σ =1 ( , ො (−1) + ( )) + Ω( ) = min σ =1 ( − (ො (−1) + ( ))) + Ω( ) ※引用文献には、「損失関数を に関して、0の周りで2次のテーラー展開を行う。」 とあったが、何度計算しても元の関数と変わらなかったため、そのまま計算する。 Ω( )= + 1 2 2 2 = min σ=1 (( −ො (−1)) − 2 ( −ො (−1)) + ) + Ω( ) 2 2 最適化に関係のない項、つまり に関わらない項を除いたものを෨ L()とすると、 2 = min σ =1 ( + ) + Ω( ) 2 = −2( −ො (−1))
  9. XGBoostを数式で理解しようとする4/7 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. (ステップ1)決定木

    が返すべき値∗について min ෨ () ( ) = min σ=1 ( + 2 ) + Ω( ) = min σ=1 ( + 2 ) + + 1 2 =min σ=1 T (σ∈ + σ∈ ) + + 1 2 σ=1 2 = min σ=1 T (σ∈ + ) + + 1 2 σ=1 2(ℎ は と出力されるノード に含まれるデータの個数) = min σ=1 T (σ∈ + ℎ 2 + 1 2 2) + = min σ=1 T (σ∈ + 1 2 (2ℎ + ) 2) + 2 ∗= − σ∈ 2ℎ+ ෨ ()を で微分したものを0とおくと、最適解 ∗は、 となる。これで、決定木 が返すべき値 ∗がわかった。 4 ∗ 2 ∗ 1 ∗ (式の展開のポイント) ・Σをノード 別に計算する ・ 2 を 2で表す ・ノード に含まれるデータの個数をℎ と表す (例:上図のノード3(3 )では、 ℎ3 = 6 ) 3 ∗
  10. XGBoostを数式で理解しようとする5/7 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. (ステップ1)決定木

    が返すべき値∗について(この式が意味するもの(小話)) ∗= − σ∈ 2ℎ+ = −2( −ො (−1)) ℎ は と出力される集合 に含まれるデータの個数 : の大きさに対するペナルティ (罰則項Ω( )= + 1 2 の式に出てくる) ∗:決定木 が返すべき値∗のj番目要素(ノード の返すべき出力結果) (1 , 2 , 3 , 4 , 5 ) (1 , 2 , 3 ) (4 , 5 ) (2) =4としたときの 1 ∗, 2 ∗の値は、 1 ∗= − σ∈1 2ℎ1+ = − −2 1 + −2 1 + −2(1) 2×3+4 = 0.6 2 ∗= − σ∈2 2ℎ2+ = − −2 0 + −2 0 + −2(0) 2×2+4 = 0 となり、1 ∗の値が直感的によさそうな値 よりも小さくなっていることがわかる。 →過学習を防いでいる。 罰則項のパラメータの値 によって出力結果 1 ∗, 2 ∗ の値が異なる。 左図において、(1 , 2 , 3 , 4 , 5 ) = 1,1,1,0,0 として、(1 , 2 , 3 ) = 1,1,1 , 4 , 5 = (0,0)に分かれた とする。このとき、1 =1、 2 = 0 と出力されることが直感的によさそうだが・・・ 2 ∗ 1 ∗ (1) =0としたときの、 1 ∗, 2 ∗ の値は、 1 ∗= − σ∈1 2ℎ1+ = − −2 1 + −2 1 + −2(1) 2×3+0 = 1 2 ∗= − σ∈2 2ℎ2+ = − −2 0 + −2 0 + −2(0) 2×2+0 = 0 となり、直感的によさそうな出力と、 1 ∗, 2 ∗の値が一致している。 ( 実は、=0のときは算術平均と同 じ式になっている)
  11. XGBoostを数式で理解しようとする6/7 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. (ステップ2)説明変数の分岐方法

    ∗= − σ∈ 2ℎ+ ෨ () = − 1 2 σ=1 (σ∈ ) 2ℎ+ + 2 を目的関数෨ ()に代入すると、 が得られる。 【分岐方法の考え方】 目的関数෨ ()が小さくなるように、 分岐するためには、分岐前෨ () と 分岐後෨ () のそれぞれの目的関数 の差(෨ () ー ෨ () )が最大になる ように分岐すれば良い。 大 小
  12. XGBoostを数式で理解しようとする7/7 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. (ステップ2)説明変数の分岐方法(具体例)

    (100,1,2) (100) (1,2) (100,1,2) (2) (100,1) 1 2 (4×1002 2+λ + 4×32 4+λ ー 4×1032 6+λ ) 1 2 (4×12 2+λ + 4×1022 4+λ ー 4×1032 6+λ ) (1) (100,1,2) (100,2) 1 2 (4×22 2+λ + 4×1012 4+λ ー 4×1032 6+λ ) ෍ ℎ = 2ℎ (ℎ はノード に含まれるデータの個数) = −2( −ො (−1)) : 出力結果に対するペナルティ (1) (2) (3) 実際に、(100,1,2)という誤 差に対する分岐を考えた とき、すべての考えられ る組み合わせで ෪ ( () ー ෨ () )を計算すると、(1) の場合が最も大きくなる。 n個の要素を2組に分ける ときの考えられる組み合 わせ=(2−1 − 1)通り
  13. XGBoostを数式で理解しようとする7/7 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. XGBoostのアルゴリズム

    XGBoostのアルゴリズム(簡易版) (ステップ2)説明変数の分岐方法 前スライドの望ま しい分岐を行うた めの式と同じ→
  14. XGBoostを数式で理解しようとする(まとめ) © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL. ・決定木

    の作り方 (ステップ1)決定木 が 返すべき値を求める (ステップ2)ステップ1のwをもと に、決定木 の分岐の仕方を決める min () ( ) = min σ =1 ( , ො (−1) + ( )) + + 1 2 これで決定木 が作れる。 まさに、 損失関数 罰則項 (過学習を防ぐため) 2 eXtreme!
  15. 主な参考・引用文献 XGBoostの概要 - ともにゃん的データ分析ブログ http://kefism.hatenablog.com/entry/2017/06/11/182959 →本当にお世話になったブログ。このLT資料作成にあたって、50回はこの サイトに訪問させていただいた。 XGBoost: A Scalable

    Tree Boosting System https://arxiv.org/pdf/1603.02754.pdf →XGBoostのアルゴリズムを詳説した英語の論文。もっと知りたい人は是非 とも読んでいただきたい。 © 2019 Chura DATA inc. PROPRIETARY & CONFIDENTIAL.