ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [머신러닝] HPO 최적의 하이퍼 파라미터 찾기 GridSearch 예제
    머신러닝 배우기 2023. 12. 11. 22:50

    ▶︎ HPO (= Hyper-Parameter Optimization)

    → 하이퍼파라미터 튜닝이나 모델 튜닝으로 불리며, 사람이 지정해줘야하는 하이퍼파라미터를 최적의 조합으로 찾아주는 것을 뜻한다.

    하이퍼파라미터를 잘 찾아야 하는 이유는 하이퍼파라미터가 모델의 학습 과정을 제어하고(과적합을 방지하고) 모델의 성능에 영향을 미치기 때문이다.

     

    ▶︎ HPO 기법의 종류

    1. Grid Search

    : 사용자가 후보값들을 정해주고, 모든 경우의 수를 조합하여 교차 검증을 수행하여 최적의 조합을 찾는 방법이다. 가장 널리 사용되고 직관적이다.

    2. Random Search

    : 분포를 지정해주며 컴퓨터가 랜덤하게 파라미터 조합을 선택하여 탐색하는 방법이다. 전통적인 머신러닝보단 딥러닝에서 더 많이 활용된다.

    3. Bayesian Optimization

    : 베이지안 통계를 기반으로 확률 모델을 사용하여 하이퍼파라미터 조합의 함수 값을 최대화하는 조합을 선택하는 방법이다

    4. Genetic Algorithms

    : 유전 알고리즘을 사용하여 하이퍼파라미터의 조합을 진화시켜나가면서 최적의 조합을 찾는 방법이다

     

    ▶︎ Grid Search 사용법

    from sklearn.model_selection import GridSearchCV
    from sklearn.모델_클래스 import 모델_생성자
    
    # 모델 생성자와 탐색할 하이퍼파라미터 그리드 정의
    param_grid = {'parameter1': [value1, value2, ...],
                  'parameter2': [value1, value2, ...],
                  ...}
    
    # 모델 생성자 및 매개변수 그리드로 GridSearchCV 객체 생성
    grid_search = GridSearchCV(모델_생성자(), param_grid, cv=교차검증_횟수, scoring='평가지표')
    # 모델_생성자: 사용할 머신러닝 모델의 생성자(클래스)를 지정합니다.
    # param_grid: 탐색할 하이퍼파라미터 그리드를 딕셔너리 형태로 정의합니다.
    # cv: 교차 검증을 수행할 fold 수를 지정합니다.
    # scoring: 모델의 성능을 평가할 지표를 선택합니다. (예: 'accuracy', 'precision', 'recall', 'f1', 등)
    
    # 데이터에 모델을 훈련하고 최적의 하이퍼파라미터를 찾음
    grid_search.fit(X_train, y_train)
    
    # 최적의 하이퍼파라미터 및 모델의 성능 출력
    print("Best Parameters:", grid_search.best_params_)
    print("Best Score:", grid_search.best_score_)

     

    ▶︎ Grid Search 서포트벡터머신 예제

    from sklearn.model_selection import GridSearchCV
    from sklearn.svm import SVC
    
    # param_grid dict에 조합을 찾고 싶은 Hyper-params 값들을 리스트업합니다.
    param_grid = {'C' : [0.1, 1, 10, 100, 1000], 
                 'gamma' : [1, 0.1, 0.01, 0.001, 0.0001],
                 'kernel' : ['rbf','poly']}
    
    grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2)
    # refit : 찾아진 가장 좋은 params로 estimator를 setting할 지 여부 (setting해줘야 곧바로 predict가 가능)
    # verbose : 설명의 자세한 정도 (verbose를 3과 같이 바꾸면 더 자세하게 매 param set 마다의 결과를 확인할 수 있습니다.)
    
    grid.fit(X_train_scaled, y_train)
    print('The best parameters are ', grid.best_params_)
    
    # Result
    # The best parameters are  {'C': 0.1, 'gamma': 1, 'kernel': 'poly'}
Designed by Tistory.