데이터 사이언스/파라미터 조정
Optuna 파라미터 튜닝
주인장 아저씨
2021. 12. 13. 22:50

import optuna
from optuna.samplers import TPESampler
def objective(trial):
param = {
"random_state":42,
'learning_rate' : trial.suggest_loguniform('learning_rate', 0.01, 0.2),
'bagging_fraction' :trial.suggest_float('bagging_fraction', 0.0, 1.0),
"n_estimators":trial.suggest_int("n_estimators", 1, 1000),
"max_depth":trial.suggest_int("max_depth", 1, 16),
"num_leaves":trial.suggest_int("num_leaves",1, 100),
"min_data_in_leaf": trial.suggest_int("=min_data_in_leaf", 2, 100),
"feature_fraction": trial.suggest_float("feature_fraction", 0.0, 1.0),
'lambda_l1': trial.suggest_float('lambda_l1', 0.0, 2.0),
'lambda_l2': trial.suggest_float('lambda_l2', 0.0, 2.0),
'path_smooth': trial.suggest_float('path_smooth', 0.0, 2.0),
}
X_t, X_v, y_t, y_v = train_test_split(train_X, train_Y, shuffle = True, test_size=0.2, random_state=42)
lgbm = LGBMRegressor(**param)
lgbm.fit(X_t, y_t,
eval_set=[(X_t, y_t), (X_v,y_v)],
early_stopping_rounds=35, verbose=100)
lgbm_pred = lgbm.predict(X_v)
RMSE = mean_squared_error(y_v, lgbm_pred, squared=False)
return RMSE
sampler = TPESampler(seed=42)
study = optuna.create_study(
study_name = 'lgbm_parameter_opt',
direction = 'minimize',
sampler = sampler,
)
study.optimize(objective, n_trials=10)
print("Best Score:",study.best_value)
print("Best trial",study.best_trial.params)