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

今回は、CatBoostで回帰問題のモデルを構築してみたいと思います。
環境は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)

モデルの構築

!pip install catboost

Google CorabにCatBoostがプリインストールされていないため、インストールします。

from catboost import CatBoostRegressor

model = CatBoostRegressor(
    iterations=1000,
    learning_rate=0.1,
    depth=6,
    loss_function='RMSE',
    logging_level='Silent'
)

model.fit(X_train, y_train)

回帰問題にはCatBoostRegressorを使用し、モデルを構築します。
ハイパーパラメーターには下記を指定しています。

  • iterations: ブースティングの反復回数を指定します。ここでは1000回の反復を行う設定です。反復回数を増やすと、より精度の高いモデルが得られる可能性がありますが、過学習のリスクも高まります。

  • learning_rate: 学習率を指定します。学習率は各ステップでモデルがどの程度調整されるかを決定するパラメータです。低すぎると収束が遅くなり、高すぎると最適解に到達しない可能性があります。

  • depth: 決定木の深さを指定します。深さが大きいほどモデルは複雑になり、より精度の高い予測が可能ですが、過学習のリスクも増します。

  • loss_function: 損失関数を指定します。ここでは平均二乗誤差 (Root Mean Squared Error, RMSE) を使用します。RMSEは回帰問題でよく使われる指標で、予測値と実際の値の差の二乗平均の平方根を取ったものです。

  • logging_level: 学習時の出力を制御します。'Silent'に設定すると、訓練中の詳細なログを表示しません。'Verbose'に設定すると詳細なログが表示されます。

評価

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

from sklearn.metrics import mean_squared_error

y_pred = model.predict(X_test)
rmse = mean_squared_error(y_test, y_pred, squared=False)

print(f'RMSE: {rmse}')

RMSE: 0.43743496521720504