데이터 사이언스/파라미터 조정

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.010.2),
      'bagging_fraction' :trial.suggest_float('bagging_fraction'0.01.0),
      "n_estimators":trial.suggest_int("n_estimators"11000),
      "max_depth":trial.suggest_int("max_depth"116),
      "num_leaves":trial.suggest_int("num_leaves",1100),
      "min_data_in_leaf": trial.suggest_int("=min_data_in_leaf"2100),
      "feature_fraction": trial.suggest_float("feature_fraction"0.01.0),
      'lambda_l1': trial.suggest_float('lambda_l1'0.02.0),
      'lambda_l2': trial.suggest_float('lambda_l2'0.02.0),
      'path_smooth': trial.suggest_float('path_smooth'0.02.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)