하이퍼파라미터 튜닝방법에는 GridSearchCV 이외에 Optuna도 있다. Optuna는 최신 Automl 기법이라 빠르게 튜닝이 가능하다.
기존의 GridSearchCV는 하이퍼 파라미터 값을 직접 지정해주어야 하지만, Optuna는 러프하게 값을 지정해주면, 범위 내에서 자동탐색을 통해 최적의 하이퍼파라미터 값을 도출한다.
import optuna
#XGB 하이퍼 파라미터들 값 지정
def objectiveXGB(trial,X,y):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False, random_state=42)
#https://xgboost.readthedocs.io/en/latest/parameter.html 참고
param = {
'verbosity':1,
'objective':'reg:squarederror', #'reg:linear' 회귀
'max_depth':trial.suggest_int('max_depth',3,30),
'learning_rate':trial.suggest_loguniform('learning_rate',1e-8,1e-2),
'n_estimators':trial.suggest_int('n_estimators',100,3000),
'subsample':trial.suggest_loguniform('subsample',0.7,1),
'min_child_weight': trial.suggest_int('min_child_weight', 1, 300 ),
'alpha': trial.suggest_loguniform( 'alpha', 1e-3, 10.0),
'random_state': 42}
#학습모델 생성
model=XGBRegressor(**param)
model.fit(X_train,y_train,eval_set=[(X_test,y_test)],early_stopping_rounds=25,verbose=False)
pred = model.predict(X_test)
mae = mean_absolute_error(y_test, pred)
return mae
# MAE가 최소가 되는 방향으로 학습을 진행
studyXGB=optuna.create_study(direction='minimize')
# n_trials 지정
studyXGB.optimize(lambda trial: objectiveXGB(trial, X, y), n_trials=100)
print('study.best_params:', studyXGB.best_trial.value)
print('Number of finished trials:', len(studyXGB.trials))
print('Best trial:', studyXGB.best_trial.params)
print('study.best_params:', studyXGB.best_params)
#파라미터 중요도 시각화
optuna.visualization.plot_param_importances(studyXGB)