らんだむな記憶

blogというものを体験してみようか!的なー

勾配ブースティング木 (3)

LightGBM を使ってみよう。今回も Kaggle 本 p. 240 と公式ドキュメントを混ぜたような内容にしつつ 決定木 (6) - らんだむな記憶 の内容を試す。

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import lightgbm as lgb

# データセットのロードと訓練データと検証データとテストデータへの分割
iris = datasets.load_iris()
X = iris.data[:, [2, 3]]
y = iris.target

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

X_train, X_val, y_train, y_val = train_test_split(
    X_train, y_train, test_size=0.16, random_state=1, stratify=y_train)

# LightGBM による分類器の作成と訓練
dtrain = lgb.Dataset(X_train, label=y_train)
dvalid = lgb.Dataset(X_val, label=y_val)

param = {
    'objective':'multiclass',
    'metric': 'multi_logloss',
    'num_class': len(iris['target_names']),
    'max_depth': 3,
    'learning_rate': 0.1,
    'verbosity': 1,
    'early_stopping_round': 10,
    #'gpu_device_id': 0,
}

gbm = lgb.train(param, dtrain, num_boost_round=20, valid_sets=dvalid)

y_pred = gbm.predict(dtest)
y_pred = np.array([np.argmax(ps) for ps in y_pred])
print(accuracy_score(y_pred, y_test))

0.9666666666666667

という感じの結果になった。決定境界は少し不思議な形になった。

f:id:derwind:20220326232130p:plain