データ解析

Catboostとは?XgboostやLightGBMとの違いとPythonでの実装方法を見ていこうー!!

Catboost
ウマたん
ウマたん
本記事では、XgboostやLightGBMに代わる新たな勾配ブースティング手法「Catboost」について徹底的に解説していき最終的にPythonにてMnistの分類モデルを構築していきます。LightGBMやディープラーニングとの精度差はいかに!?

こんにちは!

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

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

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

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

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

この記事では、そんなCatboostの概要について見ていき、PythonでMnistの画像データを分類するモデルを作っていきます。

LightGBMとディープラーニングとの精度比較も行いますよー!

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

Catboostとは?XgboostやLightGBMとの違い

勾配ブースティング

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

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

Yandex社はロシアのGoogle。

ロシアの検索エンジン市場の過半数を占有しており、自動車産業にも事業展開している大手IT企業なんです。

ロボたん
ロボたん
へー!中国以外にも検索市場でGoogleが天下を取っていない国があるんだねー!
ウマたん
ウマたん
韓国はNaverが圧倒的だし、国産会社が検索市場でトップシェアを取っている国はまだまだ多いね!

さて、そんなYandex社が発表した「Category Boosting」ですが他の勾配ブースティング手法と比較してどのような特徴があるのでしょうか?

「Category Boosting」を発表した論文を見てみると以下のように書いてあります。

In this paper we present a new gradient boosting algorithm that successfully handles categorical features and takes advantage of dealing with them during training as opposed to preprocessing time.
Another advantage of the algorithm is that it uses a new schema for calculating leaf values when selecting the tree structure, which helps to reduce overfitting.
(引用元:”CatBoost: gradient boosting with categorical features
support”)

ここで言っているのは2つ。

・カテゴリカル変数(質的変数)の扱い方が上手いよ
・決定木のツリー構造を最適にして過学習を防ぐよ

まあ、要はデータセットによるけどXgboostやLightGBMよりも精度が高くなる可能性があるよってことですね。

実際に論文の中でもいくつかのデータセットに各手法を適用させてLogloss値で比較をしています。

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

実際にCatboostが最も良い精度をたたき出しているのが分かると思います。

ちなみにCatboostの公式HPに色々とまとめてありますが、大規模データセットのモデル構築も予測も比較的早い速度で出来るよ、とも書いてあります。

CatboostをPythonで実装してみよう!

実際にそんなCatboostをPythonで実装していきましょう!

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

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

LightGBMでディープラーニング(CNN)と比較していきますよー!

ちなみに機械学習モデルを個人で構築するならGoogle colaboratoryがオススメです!

永久無料でGPUが使えるので!

Google Colaboratory
Google Colaboratoryのメリットと使い方!GPU環境でPython回すならこれだ!当ブログ【統計ラボ】の本記事では、Googleが無償で提供する機械学習のプラットフォーム「Google Colaboratory」をメリット・デメリット・使い方について見ていきます!実際にPythonを実行していきGPUの威力を見ていきます。...

CatboostについてもGoogle colaboratoryを使ってモデル構築していきます!

CatboostでMnistを分類

Catboostは、その名の通りcatboostという名前のライブラリから使用することが可能なんです。

前準備として必要なライブラリを読み込んでいきましょう!

続いて、今回分類を行うMnistデータを加工。

Catboostにインプットするためのデータを用意します。

パラメータを設定して・・

モデル構築と予測を行っていきます。

推定精度は0.963!非常に高い精度を得ることができました。

最新の勾配ブースティング手法「Catboostがこんなにもカンタンに実装できちゃうんです」

全コードをまとめておきましょう!

LightGBMとディープラーニング(CNN)でMnistを分類

同様にLightGBMを使用してMnistを分類した結果は・・・0.9583!

Catboostに軍配があがりました。

LightGBMの全コードは以下です。

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

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

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

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

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

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

単純に推定精度で比較すると、CNN>Catboost>LightGBMとなりました。

CNNはやはり画像認識に強いので、なんとなく納得のいく結果。

もう少し真面目にパラメータチューニングを行えば順序が逆転することは多いにあります。

ぜひ色々と試してみてください!

Catboost まとめ

Catboostについて見てきましたー!

最後にカンタンにCatboostの特徴をまとめておきましょう!

・カテゴリカル変数(質的変数)の扱い方が上手いよ
・決定木のツリー構造を最適にして過学習を防ぐよ
・計算負荷が低いよ

Pythonで容易に実装できるので、ぜひ使ってみてください。

XgboostやLightGBMより高い精度を得られるかもしれませんよー!

ちなみにPythonの学習方法については以下の記事でまとめていますのでよければチェックしてみてください!

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

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

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