データ解析

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はXgboostのあと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法は学習の構造的に過学習に陥りやすいという特徴があります。

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

過学習とは?過学習を回避する方法についてまとめていく!こんにちは!デジタルマーケターのウマたん(@statistics1012)です! 普段、嘘みたいに高い予測精度を何も考えず使ってい...

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

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

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

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

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

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

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

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

 

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

 

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

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

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

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

だいぶ高い正答率!

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

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

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

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

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

惜しくもLight GBMは負けてしまいましたが、それほど優劣ない結果が導き出せました。

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

Light GBM まとめ

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

最後にLight GBMについて簡単にまとめておきましょう!

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

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

ディープラーニングやAI周りを深く勉強したい場合は以下の記事を参考にしてみてください!

AI・データサイエンスが学べるオンラインスクールサービス5選!こんにちは! 消費財メーカーでデジタルマーケター・データサイエンスティストをやっているウマたん(@statistics1012)で...

 

Pythonを初学者が最短で習得する勉強法

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

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