Python

Light GBMの仕組みとPythonでの実装を見ていこう!

Light GBM
ウマたん
ウマたん
本記事では、最強の機械学習手法「Light GBM」についてまとめていきます。Light GBMは決定木と勾配ブースティングを組み合わせた手法で、Xgboostよりも計算負荷が軽い手法として注目を集めています。

こんにちは!

消費財メーカーでデジタルマーケター・データサイエンスティストをやっているウマたん(@statistics1012)です!

様々なコンペティションで上位入賞しているのが勾配ブースティングを使ったモデル!

決定木とブースティングを用いたXgboostが2014年に考案され、今でも最前線を戦う最強の手法ではあるのですが・・・

そんなXgboostの絶対的地位を脅かす存在がLight GBM!!

Light GBMの構造はXgboostと非常に近いものがありますが、計算負荷が少なくXgboostから置き換わりつつある手法です。

ロボたん
ロボたん
あのXgboostを超える手法が登場!?
ウマたん
ウマたん
機械学習の世界は進化が非常に早いからねー!

この記事では、そんなLight GBMについて徹底的に見ていきます!

Light GBMの特徴と理論、Pythonでの実装方法について見ていきましょう!

最後にはディープラーニングとの比較も行っていきますよー!

ウマたん
ウマたん
Pythonの勉強は以下の記事をチェック!
【独学入門】初心者が3か月でPythonを習得できるようになる勉強法!当ブログ【統計ラボ】の本記事では、Pythonを効率よく独学で習得する勉強法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...

Light GBMとは

Light GBMは2016年にリリースされ、Xgboostを改良した手法になっています。

XgboostのgboostはGradient boost(勾配ブースティング)を示しており、Light GBMのGBMも同じくGradient boosting machine(勾配ブースティング)を示しています。

すなわち両手法とも基本的な考え方は同じ。

どちらも弱学習器である決定木を勾配ブースティングによりアンサンブル学習した手法になります。

LightGBM speeds up the training process of conventional GBDT by up to over 20 times while achieving almost the same accuracy.
(引用:”Google-LightGBM: A Highly Efficient Gradient Boosting
Decision Tree“)

論文にある通り、Light GBMは通常の決定木を用いた勾配ブースティングよりも高速で解を求めることができるとあります。

それゆえにLightという名前が用いられているのですね。

ただ必ずしも精度が良くなるとは結論付けられておりません。

ロボたん
ロボたん
精度が良くならないなら他の勾配ブースティングでいいんじゃないのー??
ウマたん
ウマたん
いやいや、精度が一緒でも解に到達するスピードが速いコトは特徴量精査のPDCAを回しやすく結果的に良い結果を生む可能性が高い!

精度を上げるためには手法の優劣よりも特徴量によって決まるコトが多いです。

その特徴量の精査にかける時間を取るためにはモデル構築の時間が早い手法を使う方が有利なのです。

そのため、時間の限られたコンペティションではLight GBMを使うユーザーが非常に多くなってきています。

Light GBMの特徴

ルービックキューブ

さてLight GBMの概念について見てきましたが、ここで簡単にLight GBMの特徴と理論について確認しておきましょう!

決定木と勾配ブースティングを組み合わせた手法

Light GBMは決定木と勾配ブースティングを組み合わせた手法です。

決定木とは、ある変数の値によって集団をグループ分けしていく手法です。

例えば、2変数であれば以下のように分けることができます。

決定木

タイタニック号のデータセットを決定木で分類していく例などが有名でしょう。

ただ決定木は、直線でしか分類できないため、非線形に分布するデータセットを上手く分類することができません。

過学習はしにくいですが、全てのデータにフィッティングすることができるとは限らないのです。

そのような手法を弱学習器と呼びます。

そして弱学習器を最強の手法に生まれ変わらせるのがアンサンブル学習という学習方法。

アンサンブル学習では複数の弱学習器を用いて学習をおこなっていきます。

アンサンブル学習の中でもバギングは並列的に、ブースティングは直列的に学習していきます。

バギングは並列に学習を進めて多数決を取るイメージ。

バギング

決定木×バギングはランダムフォレストと呼ばれ、これも強力な機械学習手法です。

一方、勾配ブースティングでは直列に学習を進めていきます。

勾配ブースティング

この学習のプロセスにおけるミソは、前回のモデルで生じた誤差を訓練データとして次の学習が行われるということ。

これにより、より誤差が少ないモデルが構築されるようになるというわけです。

そして、この決定木×ブースティングの手法こそLight GBMの根幹です。

決定木の学習方法が違う

決定木×勾配ブースティングだけではXgboostもLight GBMも変わりません。

Light GBMの特徴は、その学習方法にあります。

Xgboostを含む通常の決定木モデルは以下のように階層を合わせて学習していきます。

それをLevel-wiseと呼びます。

level-wise学習法
(引用元:Light GBM公式リファレンス

一方Light GBMは以下のように葉ごとの学習を行います。これをleaf-wise法と呼びます。

leaf-wise学習法
(引用元:Light GBM公式リファレンス

これにより、ムダな学習をしなくても済むためより効率的に学習を進めることができます。

Light GBMの解到達スピードが速いゆえんはここにあるのです。

過学習しやすい

ただ、先ほどのleaf-wise法は学習の構造的に過学習に陥りやすいという特徴があります。

過学習とは訓練データにフィッティングし過ぎて未知データに対する予測精度が下がってしまう現象のことを言います。

過学習とは?機械学習を実装する際に過学習を回避する方法をまとめていく!当サイト【統計ラボ】の本記事では、データ分析時に気を付けなくてはいけない過学習についてまとめていきます。過学習はどんな時に起こるのか理解した上で、過学習を回避する方法についても詳しく見ていきますよー!データ分析時の参考にしてくださいね!...

特にデータセットのサンプル数が少ない時は過学習のおそれがあるため注意が必要です。

学習する層の深さを一定以下に抑えるなど学習過程に制御を加えて過学習をしないようにしましょう!

Light GBMをPythonで実装してみよう!

PC

さて、そんなLight GBMを実際にPythonで実装していきましょう!

Pythonであればいとも簡単に実装することができるんです!

まずは、必要なライブラリを読み込みます。

今回は、Mnistというよく画像認識に使われるデータセットを用いていきます。

このデータセットには0~9の文字が様々なカタチで書かれたサンプルが入っています。

 

これにより学習データ60000個とテストデータ10000個に分けられます。

 

さらにこの部分で、データセットの変数を行列から1次元に変換し正規化しています。

パラメータを決定しLight GBMを回すのはこの部分。

実際にLight GBMで推定してみると・・・

0.972という推定精度が得られました!

Light gbm Mnist

だいぶ高い正答率!

全コードを以下にまとめておきます。

そして目を見張るべきはこの処理時間!Light gbmでは、178秒で処理が終了しているんです。

Xgboostでも同じデータセットを分類していますが、なんと1400秒もかかっています。

Xgboost Mnist
XGboostとは?理論とPythonとRでの実践方法!当ブログ【統計ラボ】の本記事では、機械学習手法の中でも非常に有用で様々なコンペで良く用いられるXgboostについてまとめていきたいと思います。最後にはRで他の機械学習手法と精度比較を行っているのでぜひ参考にしてみてください。...

Light gbmとXgboostとCatboostの3大勾配ブースティング手法を比較した記事を以下にまとめていますのでこちらもチェックしてみてください!

勾配ブースティング
勾配ブースティング手法をPythonで実装して比較していく!当サイト【統計ラボ】の本記事では、勾配ブースティングの各手法をPythonで実装して徹底比較していきます!勾配ブースティングの代表手法「Xgboost」「Light gbm」「Catboost」で果たしてどのような違いがあるのでしょうか?...

ちなみにディープラーニングで回した時の推定精度は、0.9696!

以下がディープラーニングのコードになります。

詳しくは以下の記事でまとめています!

【入門】ディープラーニングとは?仕組みとPythonでの実装を見ていこう! こんにちは! 消費財メーカーでデジタルマーケ&データサイエンティスト的なお仕事をしているウマたん(@statist...

Light GBMの強力さが分かっていただけたと思います。

Light GBM まとめ

Light GBMについて見てきました!

Light GBMは強力な手法ですがPythonで比較的簡単に実装できます。

最後にLight gbmの特徴についてまとめておきましょう!

・決定木と勾配ブースティングを組み合わせた手法
・決定木の学習方法が違う
・過学習しやすい

データセットによっては、ディープラーニングを作り込むよりも勾配ブースティングの方が強力なコトは多いです。

他の勾配ブースティング手法やディープラーニングについては以下の記事でまとめています。

勾配ブースティング
勾配ブースティング手法をPythonで実装して比較していく!当サイト【統計ラボ】の本記事では、勾配ブースティングの各手法をPythonで実装して徹底比較していきます!勾配ブースティングの代表手法「Xgboost」「Light gbm」「Catboost」で果たしてどのような違いがあるのでしょうか?...
【入門】ディープラーニングとは?仕組みとPythonでの実装を見ていこう! こんにちは! 消費財メーカーでデジタルマーケ&データサイエンティスト的なお仕事をしているウマたん(@statist...

また、機械学習全般の手法を以下にまとめていますのでこちらも合わせて見てみてください!

機械学習入門に必要な知識と独学勉強方法をPythonとRの実装と一緒に見ていこう!当サイト【統計ラボ】の本記事では、入門者向けに機械学習についてカンタンにまとめていきます。最終的にはどのように機械学習を学んでいけばよいかも見ていきます。細かい手法の実装もPython/Rを用いておこなっていくので適宜参考にしてみてください。...
Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!