のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

CatBoostを5分程度で動かしてみた

Sponsored Links

皆さんこんにちは
お元気ですか?私は年末の師走フラグが立っています。

少し前(この界隈ではだいぶ前っぽい)にYandex社からCatBoostが発表されました。
これが発表されたことは知っていたのですが、時間が取れなくて利用してなかったソフトウェアの1つです。

CatBoost

CatBoostはYandex社が開発した勾配ブースティングをベースとした機械学習のライブラリです。
catboost.yandex

公式サイトには次の特徴が記載されています。

  1. 過学習を減らす。・・・独自のアルゴリズムによって実現した。
  2. カテゴリ特徴量の対応・・・前処理を行わなくてもカテゴリ特徴量に対応をしている。
  3. ユーザフレンドリなAPI・・・コマンドラインツールもしくは、Python,RのAPIをサポートしている。

公式ページ記載のベンチマークは他のLight GBMやxgboostよりも
よく見え、かつ新しい標準的な手法であることを主張しているのでぜひ使ってみたい所です。

※ICML2017で、少し資料があがっているようです。
https://indico.cern.ch/event/617754/contributions/2590694/attachments/1459648/2254154/catboost_for_CMS.pdf

実際に使ってみる。

インストール

まずは、インストールですが簡単にできます。
(あれ・・難しくなかった・・・)

pip install catboost

実行する

まずは、インストールできていることを確認しましょう。
試しにインストールしたライブラリをインポートしてみます。

from catboost import CatBoostRegressor

エラーが出ず、実行が完了すればインストールは成功しているはずです。

簡単な実行サンプルの紹介

CatBoostには大きく分けて2つのクラスがあります。

1つ目がCatBoostRegressorで回帰問題を解くクラス、
2つ目はCatBoostClassifierで分類問題を解くクラスになります。

解く問題によって、必要なクラスを選択することになるでしょう。

回帰問題

import numpy
from catboost import CatBoostRegressor
# 学習データ
dataset = numpy.array([[1,4,5,6],[4,5,6,7],[30,40,50,60],[20,15,85,60]])
train_labels = [1.2,3.4,9.5,24.5]
model = CatBoostRegressor(learning_rate=1, depth=6, loss_function='RMSE')
fit_model = model.fit(dataset, train_labels)

model.predict(dataset)

分類問題

from catboost import CatBoostClassifier
cat_features = [0,1,2]
train_data = [["a","b",1,4,5,6],["a","b",4,5,6,7],["c","d",30,40,50,60]]
train_labels = [1,1,-1]
test_data = [["a","b",2,4,6,8],["a","d",1,4,50,60]]
# CatBoostClassifierの初期化
model = CatBoostClassifier(iterations=2, learning_rate=1, depth=2, loss_function='Logloss')
# モデルの学習
model.fit(train_data, train_labels, cat_features)
# クラス予測
preds_class = model.predict(test_data)
# 各クラスの確率を予測
preds_proba = model.predict_proba(test_data)
# 変換していない出力数値
preds_raw = model.predict(test_data, prediction_type='RawFormulaVal')

比較的どちらもscikit-learnのインターフェースに酷似しています。
ただ、他のライブラリと異なる特徴的な部分があります。
それは、fit関数のインターフェースのcat_features変数です。

cat_featuresはカテゴリカル変数のインデックスのリストになります。
この指定をすると、カテゴリカル変数的な処理が実行されます。

見た方が良さそうなページ

最後にその他、見た方が良さそうなページを紹介します。

Usage examples

Binary Classification, Multiclassification, Regressionの簡単なサンプルや
その他実装上で利用できるコードが掲載されています。

基本的な実装はこのページを確認すれば、参考にできると思います。

tech.yandex.com

Training parameters

無数にある学習パラメータの一覧が掲載されています。
最初軽く説明しようと思ったら案外、膨大でした。
これを見ながら後に勉強しようと思います。

tech.yandex.com

最後に

今回、CatBoostを試しに動かしてみました。
実際に動かしたばかりでどの程度の精度が出るか、使いやすいかまでは至れていませんが
コンペで試運転をはじめてみようと思います。