objective 함수 작성 --> 스터디 생성 --> 파라미터 탐색
pip install optuna
def objective(trial):
trial.suggest_int("n_estimators", 100, 1000, step=100)
trial.suggest_int("max_depth", 3, 10)
trial이라는 값을 받아서
suggest라는 함수를 사용할 수 있음
파라미터 이름을 주고 그것에 대한 범위를 줌
#
# train model
#
clf = RandomForestClassifier(
n_estimators=trial.params["n_estimators"], max_depth=trial.params["max_depth"], random_state=2024
)
clf.fit(X_train, y_train)
train model을 변경
이전에는 n_estimators에서 params를 꺼냈다면 이번에는 trial에서 꺼낸다.
y_pred = clf.predict(X_valid)
acc_score = accuracy_score(y_valid, y_pred)
return acc_score
objective함수에서는 최종적으로 목표로하는 값을 전달해줘야함
정확도 최대를 높이는 함수를 반환하기 위해 acc_score를 반환
if __name__ == "__main__":
# study
sampler = optuna.samplers.RandomSampler(seed=2024)
study = optuna.create_study(sampler=sampler, study_name="hpo-tutorial", direction="maximize")
함수를 작성하면 study를 생성
study는 optuna의 create_study를 활용해 생성 가능
이때 sampler또한 지정을 한다. 이유는 항상 같은 결과를 복원하기 위해서임 난수를 추출하는 방법을통제하여 같은 값을 반환시키기 위해
direction은 maximize를 통해 최대화를 함
sampler=sampler라는 구문은 현재 사용하려는 샘플러를 재사용하겠다는 것을 의미합니다. 이전에 생성된 샘플러 객체를 사용하여 최적화를 계속 진행하겠다는 의미입니다.
# optimize
study.optimize(objective, n_trials=5)
어떠한 오브젝트를 optimize할지에 대한 값을 선언
오버피팅을 방지하기 위해서 값이 높지 않은 방법을 택하게 되면 1번째가 가장 높은 trial이 된다.
'Tech Stack > MLflow' 카테고리의 다른 글
MLOps - 교차검증 (0) | 2024.02.23 |
---|---|
MLOps - HPO 반영 (0) | 2024.02.22 |
MLOps - Hyperparameter Optimization (0) | 2024.02.22 |
MLOps - 학습 코드 로깅 추가 (0) | 2024.02.22 |
MLOps - MLflow 실행 및 docker compose (0) | 2024.02.22 |