이것저것 잡동사니
[예제 코드] hyperopt를 사용한 LightGBM의 hyperparameter tuning 본문
반응형
hyperopt를 사용해 bayesian optimization으로 classification을 수행하는 LightGBM 트리 모델의 hyperparameter의 최적값을 찾는 코드.
def objective_func(_params):
params = {
'objective': 'multiclass',
'num_class': 3,
'num_iterations': 4000,
'feature_pre_filter': False,
'verbosity': -1,
'device': 'gpu', # cpu인 경우 이 라인 생략하면 됨
'n_estimators': int(_params['n_estimators']),
'max_depth': int(_params['max_depth']),
'min_child_samples': int(_params['min_child_samples']),
'num_leaves': int(_params['num_leaves']),
'learning_rate': _params['learning_rate'],
'lambda_l2': _params['lambda_l2'],
'feature_fraction': _params['feature_fraction'],
'bagging_fraction': _params['bagging_fraction']
}
lgbmodel = lgb.train(params,
train_set=data_train,
valid_sets=[data_train, data_valid],
callbacks=[log_evaluation(10), # 10 iter마다 출력
early_stopping(40, verbose=True)]) # 40 iter동안 loss값이 떨어지지 않으면 종료
pred = lgbmodel.predict(x_valid)
return log_loss(y_valid, pred)
# 탐색할 하이퍼파라미터 범위
search_space = {
'n_estimators': hp.quniform('n_estimators', 1000, 10000, 10),
'max_depth': hp.quniform('max_depth', 3, 5000, 1),
'min_child_samples': hp.quniform('min_child_samples', 100, 10000, 50),
'num_leaves': hp.quniform('num_leaves', 100, 50000, 100),
'learning_rate': hp.uniform('learning_rate', 1e-3, 5 * 1e-2),
'lambda_l2': hp.uniform('lambda_l2', 1e-10, 1e-2),
'feature_fraction': hp.uniform('feature_fraction', 0.3, 1.0),
'bagging_fraction': hp.uniform('bagging_fraction', 0.2, 1.0)
}
# 최적값 찾기
best = fmin(fn=objective_func, space=search_space,
algo=tpe.suggest, max_evals=150, trials=trials, rstate=np.random.default_rng())
# 탐색된 최적의 하이퍼파라미터 출력
print(best)
반응형
'컴퓨터공학 > 예제 코드' 카테고리의 다른 글
[예제 코드] openpyxl 기초 사용법 완벽 정리 (0) | 2023.10.23 |
---|---|
[예제 코드] PyQt5을 사용한 조이스틱(Joystick) 클래스 (0) | 2022.12.28 |
[예제 코드] 분류 모델에 사용되는 성능 평가 지표 (sklearn 사용) (0) | 2022.07.21 |
[예제 코드/Python] 바이낸스 API를 이용한 암호화폐 선물 가격 데이터 얻기 (0) | 2022.06.11 |
[예제 코드/C언어] 윈도우 명령 프롬프트 크기 변경&고정하기 (0) | 2022.06.11 |
Comments