LightGBMで回帰問題のモデルを構築する

前回はLightGBMで二値分類モデルを構築しました。
今回は、回帰問題のモデルを構築してみたいと思います。
環境はGoogle Corabです。

データセットの用意

今回はscikit-learnに組み込まれているカリフォルニアの住宅価格データセットを利用して回帰問題のモデルを構築していきます。このデータセットは、地域の世帯収入や築年数、部屋数などを説明変数とし、住宅価格を予測します。

import pandas as pd
from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing()
data = pd.DataFrame(housing.data, columns=housing.feature_names)
data['Target'] = housing.target

目的変数の設定

X = data.drop('Target', axis=1)
y = data['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: モデルの目的を指定します。ここでは回帰問題なので 'regression' を指定しています。

  • metric: モデルの評価指標を指定します。ここでは RMSE(Root Mean Squared Error、二乗平均平方根誤差)を使用しています。

  • boosting_type: ブースティングの種類を指定します。

import lightgbm as lgb

lgb_train = lgb.Dataset(X_train, label=y_train)
lgb_eval = lgb.Dataset(X_test, label=y_test, reference=lgb_train)

params = {
    'objective': 'regression',
    'metric': 'rmse',
    'boosting_type': 'gbdt'
}

gbm = lgb.train(params, lgb_train)

評価

モデルの性能を評価するために、RMSEを計算します。

from sklearn.metrics import mean_squared_error

y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration)
rmse = mean_squared_error(y_test, y_pred, squared=False)

print(f'RMSE: {rmse}')

RMSE: 0.46351720797890145