Winter Special Discount
분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
효율적으로 하이퍼파라미터 튜닝 하는 방법 소개 : Optuna
대회가 마무리 되어가는 지금, 하이퍼파라미터 튜닝이 굉장히 중요한 시기인것 같은데요
효율적인 하이퍼파라미터 튜닝을 지원하는 optuna 라는 라이브러리 코드를 공유드리려합니다.
그리드 서치와 달리 하이퍼파라미터를 범위로 지정을 해줄 수 있어서 좀 더 직관적이고 사용하기 간편합니다.
! pip install optuna
import optuna
from optuna import Trial
from optuna.samplers import TPESampler
from sklearn.metrics import log_loss
from sklearn.model_selection import train_test_split
# train_x, train_y가 전역변수로 정의 되어있다는 가정한 코드입니다.
def objective(trial: Trial) -> float:
params_lgb = {
"random_state": 42,
"verbosity": -1,
"learning_rate": trial.suggest_float("learning_rate", 0.05, 0.1),
"n_estimators": 250,
"objective": "multiclass",
"metric": "multi_logloss",
"max_depth": trial.suggest_int("max_depth", 1, 30),
"num_leaves": trial.suggest_int("num_leaves", 2, 256),
"colsample_bytree": trial.suggest_float("colsample_bytree", 0.2, 0.6),
"subsample": trial.suggest_float("subsample", 0.3, 1.0),
"subsample_freq": trial.suggest_int("subsample_freq", 1, 10),
"min_child_samples": trial.suggest_int("min_child_samples", 2, 30),
}
X_train, X_valid, y_train, y_valid = train_test_split(train_x, train_y, test_size=0.2)
model = LGBMClassifier(**params_lgb)
model.fit(
X_train,
y_train,
eval_set=[(X_train, y_train), (X_valid, y_valid)],
early_stopping_rounds=100,
verbose=False,
)
lgb_pred = model.predict_proba(X_valid)
log_score = log_loss(y_valid, lgb_pred)
return log_score
sampler = TPESampler(seed=42)
study = optuna.create_study(
study_name="lgbm_parameter_opt",
direction="minimize",
sampler=sampler,
)
study.optimize(objective, n_trials=20)
print("Best Score:", study.best_value)
print("Best trial:", study.best_trial.params)
DACON Co.,Ltd | CEO Kookjin Kim | 699-81-01021
Mail-order-sales Registration Number: 2021-서울영등포-1704
Business Providing Employment Information Number: J1204020250004
#901, Eunhaeng-ro 3, Yeongdeungpo-gu, Seoul 07237
E-mail dacon@dacon.io |
Tel. 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved