CatBoostで多クラス分類モデルを構築する

今回は、CatBoostの多クラス分類問題のモデルを構築してみたいと思います。
環境はGoogle Corabです。

データセットの用意

load_wine は、scikit-learn ライブラリで提供されているデータセットの一つで、ワインの化学的特性とその分類に関するデータを含んでいます。目的変数はワインの種類で3種類あります。

from sklearn.datasets import load_wine

wine = load_wine()
X = wine.data
y = wine.target

学習用にデータを分割

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

CatBoostモデルの構築

!pip install catboost

Google CorabにCatBoostがプリインストールされていないため、インストールします。

from catboost import CatBoostClassifier

model = CatBoostClassifier(
    iterations=1000,
    learning_rate=0.1,
    depth=6,
    loss_function='MultiClass'
)

model.fit(X_train, y_train, eval_set=(X_test, y_test), verbose=100, early_stopping_rounds=100)

CatBoostのデータセットを作成し、 分類モデルを構築します。
ハイパーパラメーターには下記を指定しています。

iterations

  • 学習の繰り返し回数を指定します。つまり、決定木を何本作成するかを決定します。

learning_rate

  • 各決定木の寄与度を制御するパラメーターです。小さくすると各ステップの変更量が少なくなり、学習がゆっくりになりますが、より精緻なモデルが期待できます。

depth

  • 各決定木の深さを指定します。深い木はより複雑なモデルを作りますが、過学習のリスクも高まります。

loss_function

モデルの損失関数を指定します。多クラス分類の場合は'MultiClass'を使用します。

評価

モデルの性能を評価してみます。

from sklearn.metrics import accuracy_score

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

Accuracy: 1.00