이것저것 잡동사니
[예제 코드] 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