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
という感じの結果になった。決定境界は少し不思議な形になった。