初心者がCatBoostで分類・回帰できるようになるまで

  • このエントリーをはてなブックマークに追加

機械学習ではLightGBMを使用していましたが、アンサンブルする相手としてCatboostがいいのでは?と考えたので、短時間でCatboostを学びました。あまり情報が出てこなかったのでmemoとして残そうと思います。

CatBoostとは?

XGBoostやLightGBMに並ぶ勾配ブースディングの一つです。CatBoostは一番最後にリリースされました。カテゴリー変数に強いとのことで早速使ってみたいです。

基本の使い方

CatBoostは3つのモジュールがあるようです。いずれもcatboostでimportできます。また、使用するにはPoolというものも必要です。

## 導入がまだな人はpipかcondaで導入する
## pipの人はpip install catboost

from catboost import CatBoost, CatBoostRegressor, CatBoostClassifier
from catboost import Pool

今回の記事ではデータの部分は割愛します。

X_train = ...
X_test = ...
categorical_features = [...]

3つのモジュールの使い方は以下の通り

CatBoost(汎用)

c_train = Pool(X_train, label=y_train,cat_features=categorical_features)  
c_test = Pool(X_test,cat_features=categorical_features)

param = {'iterations':5}
model = CatBoost(param)
model.fit(c_train)

predict = model.predict(c_test)

CatBoostRegressor(回帰問題に使用)

c_train = Pool(X_train, label=y_train,cat_features=categorical_features)  
c_test = Pool(X_test,cat_features=categorical_features)

model = CatBoostRegressor(
          loss_function='RMSE'
        )
model.fit(c_train)

predict = model.predict(c_test)

CatBoostClassifier(分類問題に使用)

c_train = Pool(X_train, label=y_train,cat_features=categorical_features)  
c_test = Pool(X_test,cat_features=categorical_features)

model = CatBoostClassifier(
           loss_function='Logloss'
        )
model.fit(c_train)

predict = model.predict(c_test)

いずれも4段階です。

  • Poolの作成
  • modelの定義
  • 学習データで学習(fit)
  • 予測データで予測(predict)

実際に使ってみた感じ

分類問題

初めて使用した際はSIGNATEの銀行の定期預金申し込み予測でしたので、

0〜1の間で申し込み確率を予測するコンペでした。

https://signate.jp/competitions/1

このコンテストの参加レビューはこちら

以下のようにCatboostを使用していきました。

c_train = Pool(X_train, label=y_train)  
c_test = Pool(X_test)

cat_params = {'iterations' : 100}
model = CatBoost(cat_params)

model.fit(c_train)

predict = model.predict(c_test, prediction_type='RawFormulaVal')

iterationsは試行回数、prediction_typeRawFormulaValは生のデータという意味で、0〜1間の数値をとります。(予測が0.6432..のようになります。)

0 or 1にしたければ、prediction_type='class'に、

0の確率、1の確率を出したければ、prediction_type='Probability'にするようです。(予測が[0.64(0の確率), 0.36(1の確率)]のようになります。)

回帰問題

2回目はSIGNATEの民泊の宿泊価格予測でしたので、

0〜無限大で価格を予測するコンペでした。

https://signate.jp/competitions/266

以下のようにCatBoostRegressorを使用していきました。

c_train = Pool(X_train, label=y_train,cat_features=categorical_features)  
c_test = Pool(X_test,cat_features=categorical_features)

model = CatBoostRegressor(
          loss_function='RMSE'
        )
model.fit(c_train)

predict = model.predict(c_test)

これはチュートリアルそのまんまですが、評価関数にRMSEを使用するところとカテゴリ変数をPoolの時点で渡すことを学びました。

RMSEについてはこちら

categorical_featuresはこの処理の前で定義しています。

categorical_features = ['bed_type', 'cancellation_policy', 'city','cleaning_fee', ...]

SNSでもご購読できます。

スポンサードリンク

コメント

コメントを残す

*