速度が違う!ブースティングのXGBoostとLightGBMの違い!

こんにちは!
IT企業に勤めて、約2年間でデータサイエンティストになったごぼちゃん(@XB37q)です!

このコラムでは、ブースティングでよく使われるXGBoostとLightGBMについて紹介します!
Kaggleでも使われる手法であり、他の手法と比較すると精度が高く出る手法と言われています!

XGBoostとLightGBMとは

XGBoostとLightGBMとは、弱学習機である決定木に基づいた勾配ブースティングと呼ばれる分析手法です。
どちらも同じ勾配ブースティングの手法ではありますが、細かい内容が違います。
Kaggleで上位ランキングを取ったことのある半分以上の人が勾配ブースティングを使った実績があるそうです。

XGBoostは2014年にリリースされ、LightGBMは2016年にリリースされました。
LightGBMは米マイクロソフト社がスポンサーをしているそうです。

勾配ブースティングは、GBDTと呼ばれることもあり、Gradient(勾配) Boosting(ブースティング)  Decision(決定) Tree(木)を表します。
つまり、GBDTは「勾配降下法(Gradient)」と「Boosting(ブースティング)」と「決定木(Decision Tree)」を組み合わせた手法です。
勾配ブースティングを理解するためには、「アンサンブル学習に該当するブースティング」と「決定木」をそれぞれ理解する必要があります。
他のコラム「pythonでできる!万能手法である決定木分析の見方と解説!」と「Kaggleでも使われる!弱学習器を組み合わせるアンサンブル学習」でそれぞれ紹介しているので、気になる人は御覧ください。

ブースティングとは

ブースティングのイメージ
ブースティングのイメージ

ブースティングは、前の弱学習機の結果を、次の学習データに反映させることで精度向上を試みる分析手法です。

初めに構築した決定木分析を決定木No.1、2番目に構築した決定木分析を決定木No.2と呼ぶとします。
決定木No.1で予測結果を出した後、実測値と予測値の誤差を重点的に学べるように、決定木No.2の学習を行います。

このように、勾配ブースティングは1つ前の弱学習機の誤差を学習していく手法です。

XGBoostとLightGBMの違い

LightGBMはより膨大なデータに対して、計算コストを少なくするように作られました。
そのため、LightGBMはXGBoostより短い時間で学習できるモデルとして有名です。

違いは大きく2つあります。

  • 分岐の順番
  • 分岐の選択肢

分岐の順番

ブースティングの学習過程には、「Level-wise」と「Leaf-wise」の2種類があります。

Level-wise
Level-wise

XGboostはLevel-wiseと呼ばれる分岐を行っており、木を階層ごとで同時に分岐させていきます。
つまり、どの葉を分析させるかの優先順位はつけずに、葉を分岐させていきます。

Leaf-wise
Leaf-wise

LightGBMはLeaf-wiseと呼ばれる分岐を行っており、木を葉ごとに分岐させていきます。
つまり、どの葉を分析させるかの優先順位をつけて、葉を分岐させていきます。
そのため、全体の葉の数は「Level-wise」より少なくなるため、計算時間を短縮させることが可能です。

しかし、データの量が少ない場合、Leaf-wiseは過学習を起こしやすい傾向にあります。

分岐の選択肢

変数のヒストグラム化
変数のヒストグラム化

XGBoostは厳密な分岐を探すために、すべてのデータを数値ごとに読み込みます。
LightGBMは葉の分岐を効率的に探すために、変数のヒストグラム化を採用しています。
つまり、LightGBMは分岐条件に使用する変数をヒストグラム化してから分岐を行っています。

XGBoostでは、数値ごとに読み込むため時間が長いですが、LightGBMでは、ヒストグラムで分岐を読み込むため、高速処理が可能です。

まとめ

  • 勾配ブースティング
    • 「勾配降下法(Gradient)」と「Boosting(ブースティング)」と「決定木(Decision Tree)」を組み合わせた手法
    • 前の弱学習機の結果を、次の学習データに反映させることで精度向上を試みる
  • LightGBM
    • 計算が早くなる2つの工夫をしているため、XGBoostより早く学習できるモデル
    • 分岐の順番:leaf-wiseを採用
    • 分岐の選択肢:変数のヒストグラム化を実施
  • Level-wise(XGBoostで採用)
    • 木を階層ごとで同時に分岐させる方法
    • どの葉を分析させるかの優先順位はつけない
  • Leaf-wise(LightGBMで採用)
    • 木を葉ごとに分岐させる方法
    • どの葉を分析させるかの優先順位をつける

速度が違う!ブースティングのXGBoostとLightGBMの違い!” に対して1件のコメントがあります。

コメントは受け付けていません。