본문 바로가기

Tech Stack/MLflow

MLOps - Optuna

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