機械学習

勾配ブースティング手法をPythonで実装して比較していく!

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

こんにちは!

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

Xgboostに代わる手法としてLightGBMが登場し、さらにCatboostという手法が2017年に登場いたしました。

これらは弱学習器である決定木を勾配ブースティングによりアンサンブル学習した非常に強力な機械学習手法群。

勾配ブースティングの仲間としてくくられることが多いです。

計算負荷もそれほど重くなく非常に高い精度が期待できるため、Kaggleなどのコンペや実務シーンなど様々な場面で頻繁に使用されているのです。

ロボたん
ロボたん
最新のアルゴリズムがどんどん登場するけど、勾配ブースティング×決定木の組み合わせであることは変わらないんだね!
ウマたん
ウマたん
そうなんだよー!それだけ勾配ブースティング×決定木の組み合わせが強いということだね!

この記事では、そんな最強の手法である「勾配ブースティング」について見ていきます!

勾配ブースティングの代表的な手法である「Xgboost」「LightGBM」「Catboost」をPythonで実装し、それぞれの精度と計算負荷時間を比較していきます!

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

勾配ブースティングとは

詳細の数式は他のサイトに譲るとして、この記事では概念的に勾配ブースティングが理解できるように解説していきます。

動画でも勾配ブースティング手法のXGBoostやLightGBMについて解説していますので合わせてチェックしてみてください!

まず、勾配ブースティングは「勾配+ブースティング」に分解できます。

まずは、ブースティングから見ていきましょう!

機械学習手法には単体で強力な精度をたたき出す「強学習器(SVMとか)」と単体だと弱い「弱学習器決定木とか)」あります。

弱学習器とは当サイト【スタビジ】の本記事では、機械学習手法の基本となっている弱学習器についてまとめていきます。実は、ランダムフォレストやXgboostなどの強力な機械学習手法は弱学習器を基にしているんです。弱学習器をアンサンブル学習させることで強い手法を生み出しているんですよー!...

弱学習器単体だと、予測精度の悪い結果になってしまいますが複数組み合わせて使うことで強力な予測精度を出力するのです。

それをアンサンブル学習と言います。

そしてアンサンブル学習には大きく分けて2つの方法「バギング」「ブースティング」があります(スタッキングという手法もありますがここではおいておきましょう)。

バギングは並列に弱学習器を使って多数決を取るイメージ

バギング

バギング×決定木ランダムフォレストという手法で、こちらも非常に強力な機械学習手法です。

一方、ブースティングとは前の弱学習器が上手く識別できなった部分を重点的に次の弱学習器が学習する直列型のリレーモデル

以下のようなイメージです。

勾配ブースティング

そして、「Xgboost」「LightGBM」「Catboost」はどれもブースティング×決定木との組み合わせなんです。

続いて勾配とは何を示しているのか。

ブースティングを行う際に損失関数というものを定義してなるべく損失が少なくなるようなモデルを構築するのですが、その時使う方法が勾配降下法。

そのため勾配ブースティングと呼ばれているんです。

最適化手法にはいくつか種類がありますが、もし興味のある方は以下の書籍が非常におすすめなのでぜひチェックしてみてください!

created by Rinker
¥3,190
(2020/10/19 22:18:56時点 Amazon調べ-詳細)

厳選5冊!統計学における数学を勉強するためにおすすめな本!当サイト【スタビジ】の本記事では、統計学の重要な土台となる数学を勉強するのにおすすめな本を紹介していきます。線形代数や微積の理解をせずに統計学を勉強しても効率が悪いです。ぜひ数学の知識を最低限つけて統計学の学習にのぞみましょう!...

勾配ブースティングをPythonで実装

勾配ブースティングについてなんとなーくイメージはつかめたでしょうか?

それでは実際に勾配ブースティング手法をPythonで実装して比較していきます!

使用するデータセットは画像識別のベンチマークによく使用されるMnistというデータです。

Mnistは以下のような特徴を持っています。

・0~9の手書き数字がまとめられたデータセット
・6万枚の訓練データ用(画像とラベル)
・1万枚のテストデータ用(画像とラベル)
・白「0」~黒「255」の256段階
・幅28×高さ28フィールド

ディープラーニングのパフォーマンスをカンタンに測るのによく利用されますね。

Xgboost

さて、まずはXgboost

Xgboostは今回比較する勾配ブースティング手法の中でもっとも古い手法です。

基本的にこの後に登場するLightGBMCatboostXgboostをもとにして改良を重ねた手法になっています。

どのモデルもIteration=100, eary-stopping=10で比較していきましょう!

結果は・・・以下のようになりました。

Xgboost Mnist

0.9764は普通に高い精度!!

ただ、学習時間は1410秒なので20分以上かかってます

Xgboostについては以下の記事で詳しくまとめていますのでこちらもチェックしてみてください!

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

Light gbm

続いて、LightGBM

LightGBMXgboostよりも高速に結果を算出することにできる手法!

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

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

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

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

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

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

詳しくは以下の記事でまとめていますのでチェックしてみてください!

Light GBM
Light GBMの仕組みとPythonでの実装を見ていこう!当ブログ【スタビジ】の本記事では、最強の機械学習手法「Light GBM」についてまとめていきます。Light GBMは決定木と勾配ブースティングを組み合わせた手法で、Xgboostよりも計算負荷が軽い手法として注目を集めています。...

それでは、LightGBMの結果はどのようになるでしょうか・・・?

Xgboost Mnist

Light gbmは、0.972!若干Xgboostよりも低い精度になりました。

ただ、学習時間は178秒なので、なんとXgboostよりも8分の1ほどに短くなっています!

データサイエンスの特徴量精査のフェーズにおいて学習時間は非常に大事なので、この違いは大きいですねー!

Catboost

続いて、Catboost

Catboostは、「Category Boosting」の略であり2017年にYandex社から発表された機械学習ライブラリ。

発表時期としてはLightGBMよりも若干後になっています。

Catboostは質的変数の扱いに上手く、他の勾配ブースティング手法よりも高速で高い精度を出力できることが論文では示されています。

Catboost performance
(引用元:”CatBoost: gradient boosting with categorical features support”)

以下の記事で詳しくまとめていますのでチェックしてみてください!

Catboost
Catboostとは?XgboostやLightGBMとの違いとPythonでの実装方法を見ていこうー!!当サイト【スタビジ】の本記事では、XgboostやLightGBMに代わる新たな勾配ブースティング手法「Catboost」について徹底的に解説していき最終的にPythonにてMnistの分類モデルを構築していきます。LightGBMやディープラーニングとの精度差はいかに!?...

さて、そんなCatboostのパフォーマンスはいかに!?

Catboost Mnist

・・・・

精度は、0.9567・・

処理時間は260秒・・

何とも中途半端な結果におわってしまいましたー!

総合的に見ると、LightGBMが最も高速で実践的。

ただデータセットによって精度の良し悪しは変わるので、どんなデータでもこの手法の精度が高い!ということは示せない。

勾配ブースティングまとめ

勾配ブースティングについて徹底的に比較してきました!

やはりLightGBMが最も高速で実用的なようです。

ロボたん
ロボたん
なるほどなー!違いが分かりやすい!
ウマたん
ウマたん
ぜひ自分でも実装して比較してみてねー!!

Xgboostはデータセットが膨大な場合、処理時間がかかり過ぎて実用的じゃなくなるケースがあります。

実際現在推進している実務でもXgboostに限界を感じております・・

ぜひ勾配ブースティングの違いを理解して、実装してみましょう!

Pythonの勉強に関しては以下の記事を参考にしてみてください!

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

 

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

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

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