ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hyper-parameter Tuning
    기계학습이론과실습 2022. 4. 20. 17:50
    • Hyper-parameter Tuning은 Model Tuning이라고도 불리며, 사용자가 임의로 설정해줘야 하는 값을 조정하는 것을 의미한다. 이를 위해서는 Validation Dataset을 사용한다.
    • 이전에는 데이터를 Train Data와 Test Data로 나눠서 모델을 구축하고 모델의 성능을 평가한 후 가장 성능이 좋은 모델을 선택하였다.
    • 이번에는 데이터를 Train Data, Validation Data, Test Data 세 가지로 나눈 후, 검증데이터를 통해 Hyper-parameter의 값을 결정하고, Test Data를 통해 모델의 최종 성능을 평가한다.
    • 이때, 모형의 일반화 정도를 높이기 위해서 K-Fold Cross Validation을 사용하기도 한다. 기존의 Train Data를 K개의 Dataset으로 나눈 뒤 K-1개의 Dataset으로 모델을 훈련하고 1개의 Dataset으로 모델의 성능을 평가한다. 모델의 성능을 평가하기 위한 Dataset을 바꾸며 해당 작업을 K번 반복한다. 이후, 모델의 성능에 대한 K개의 지표를 평균낸 값이 해당 K-Fold Cross Validation을 통한 특정 Hyper-parameter의 모델 성능 지표가 된다. 최적의 Hyper-parameter를 해당 방법을 통해 찾은 뒤 Test Data를 통해 모델의 최종 성능을 평가한다.

     

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(iris_features, iris_labels, test_size = 0.3, random_state=0)

     

    from sklearn.linear_model import LogisticRegression

    Ir_base = LogisticRegression(penalty='none')

     

    from sklearn.model_selection import cross_val_socre

    scores = score_val_score(Ir_base, X_train, y_train, cv=5)

    scores.mean()

     

    • 해당 작업을 각 Hyper-parameter 값에 대해서 반복해주면 되지만, 반복작업이 매우 번거로우므로 Gridsearch 방법을 사용한다. Gridsearch 이후, Best Parameters를 사용하여 전체 학습 데이터를 다시 학습하는 것이 더 효과적이다.

     

    lr_model = LogisticRegression(max_iter=10000) 

     

    from sklearn.model_selection import GridSearchCV
    LR_params = {
        'penalty' : ['none', 'l1', 'l2'], 
        'C': [0.01, 0.05, 0.1, 0.5, 1, 5, 10],
        'solver':['saga']
    }

    grid_search = GridSearchCV(lr_model, param_grid=LR_params, cv=5)

    grid_search.fit(X_train, y_train)

    grid_search.best_params_

     

    best_model = grid_search.best_estimator_
    # Best estimator (모형)을 return합니다. 
    y_preds = best_model.predict(X_test)

     

    from sklearn.metrics import accuracy_score
    accuracy_score(y_test, y_preds)

    '기계학습이론과실습' 카테고리의 다른 글

    Course Intro  (0) 2022.05.04
    Naive Bayes  (0) 2022.05.03
    Document Classification  (0) 2022.04.25
    Imbalanced Classification  (0) 2022.04.25
    Logistic Regression  (0) 2022.04.18

    댓글

Designed by Tistory.