RMSEを最適化する場合のコード例
# optunaをインストール
!pip install optuna
# ライブラリをインポート
import optuna
import numpy as np
from sklearn.model_selection import train_test_split
from catboost import CatBoostRegressor
from sklearn.metrics import mean_squared_error, mean_squared_log_error
# X(説明変数)とy(目的変数)は事前に準備しとく
train_X, val_X, train_y, val_y = train_test_split(X, y, test_size=0.2, random_state=42)
def objective(trial):
params = {
"iterations": trial.suggest_int("iterations", 50, 500),
"depth": trial.suggest_int("depth", 2, 10),
"learning_rate": trial.suggest_float("learning_rate", 0.01, 0.3, log=True),
"loss_function": "RMSE",
"random_seed": 42, # 乱数のシードを固定
"verbose": 0 # トレーニング中の出力メッセージを非表示
}
model = CatBoostRegressor(**params)
model.fit(train_X, train_y, eval_set=(val_X, val_y))
y_pred = model.predict(val_X)
rmse = np.sqrt(mean_squared_error(val_y, y_pred)) # RMSE
return rmse
study = optuna.create_study(direction="minimize")
study.optimize(objective, n_trials=100) # n_trials を増やすとより精度の高いチューニングが可能になります
print("Number of finished trials:", len(study.trials))
print("Best trial:", study.best_trial.params)
print("Best value:", study.best_value)
▼出力例
~
Number of finished trials: 100
Best trial: {'iterations': 229, 'depth': 3, 'learning_rate': 0.13115993620497746}
Best value: 301371.1093541424


