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

前回はLightGBMで二値分類モデルを構築しました。
今回は、多クラス分類問題のモデルを構築してみたいと思います。
環境は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)

モデルの構築

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

  • objective: 'multiclass' : 多クラス分類を意味します。つまり、モデルは複数のクラスに分類するために訓練されます。

  • num_class: 3: クラスの数を指定します。この場合、3はワインの種類が3種類あることを意味しています。

  • metric: 'multi_logloss': モデルの性能を評価するための評価指標を指定します。この場合、multi_logloss(マルチクラスの対数損失)は多クラス分類の評価に使用される指標です。対数損失は、予測がどれだけ正解に近いかを測定し、低いほどモデルの予測が良好であることを示します。

import lightgbm as lgb

train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)

params = {
    'objective': 'multiclass',
    'num_class': 3,
    'metric': 'multi_logloss'
}

gbm = lgb.train(params, train_data)

評価

モデルの性能を評価してみます。
多クラスの予測確率が含まれたリストから最も高い確率を持つクラスのインデックスを抽出し、予測がどれだけ正解したかを確認しています。

from sklearn.metrics import accuracy_score

y_pred = gbm.predict(X_test)
y_pred_max = [list(x).index(max(x)) for x in y_pred]

accuracy = accuracy_score(y_test, y_pred_max)
print(f'Accuracy: {accuracy}')

Accuracy: 1.0