機械学習ではLightGBMを使用していましたが、アンサンブルする相手としてCatboostがいいのでは?と考えたので、短時間でCatboostを学びました。あまり情報が出てこなかったのでmemoとして残そうと思います。
Contents
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_type
のRawFormulaVal
は生のデータという意味で、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', ...]
コメント