Table of Content
LightGBMを使ったクラス分類モデルの構築¶
LightGBMを使ったクラス分類モデルの構築をやっていきたいと思います。
In [ ]:
import numpy as np
import pandas as pd
import lightgbm
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_score, confusion_matrix, precision_score, recall_score
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
%matplotlib inline
In [ ]:
data = load_wine()
特徴量データと教師データの作成¶
load_wineで読み込んだデータはディクショナリ形式でデータが入っているので、
モデルに入力できるように、pandasのデータフレームとnumpy配列に読み込みます。
In [ ]:
X = pd.DataFrame(data.data, columns=data.feature_names)
y = data.target
print(X.shape)
print(y.shape)
In [ ]:
X.dtypes
Out[ ]:
トレーニングデータと検証用データの分割¶
scikit-learnのtrain_test_splitを使って、トレーニングデータの一部を検証用データとして分けておきます。
In [ ]:
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
モデルの作成と学習¶
モデルを構築します。
LightGBMで良く使うパラメーターは以下になります。
パラメーター変数 | 概要 | 設定可能な値 | デフォルト値 |
---|---|---|---|
num_leaves | 木を分割したあとの葉の数を指定します。 | 0以上の整数 | 31 |
max_depth | 木の深さを設定します。(深いほど過学習しやすくなります。) | 0以上の整数(0以下の場合は、木の深さの制限なし) | -1 |
n_estimators | 木の数を設定します。(増やすほど過学習しやすくなります。) | 0以上の整数 | 100 |
learning_rate | 学習率を設定します | 0から1の間 | 0.1 |
class_weight | クラスごとの重みの調整 | balanced' 又は None, クラスごとの重みのdict | None |
reg_alpha | L1正則化のパラメータ(大きくするほど正則化が強くなる(過学習を抑えやすくなる)) | 0以上の実数 | 0.0 |
reg_lambda | L2正則化のパラメータ(大きくするほど正則化が強くなる(過学習を抑えやすくなる)) | 0以上の実数 | 0.0 |
In [ ]:
lgb_clf = lightgbm.LGBMClassifier(max_depth=5)
lgb_clf.fit(X_train, y_train)
Out[ ]:
検証データでの精度の検証¶
検証データを使ってモデルの精度を検証します。
今回は正解率を出してみます。
In [ ]:
y_pred = lgb_clf.predict(X_val)
accuracy_score(y_val, y_pred)
Out[ ]:
検証データでの正解率は約97%でした。
特徴量の重要度の可視化¶
LightGBMでは学習したモデルに各特徴量の重要度が保存されます。
そちらを可視化して、どの特徴量がクラスの分類に影響が大きいかを見ることができます。
In [ ]:
lightgbm.plot_importance(lgb_clf)
Out[ ]:
まとめ¶
この記事ではLightGBMを使ったクラス分類をワインのサンプルデータを使って紹介しました。
LIghtGBMは、精度を出しやすいアルゴリズムですが、過学習に気を付ける必要があります。
また、特徴量の重要度も表示してモデルがどの特徴量を使って結果を出しているかを理解できます。