[python] scikit-learn을 활용한 하이퍼파라미터 최적화

하이퍼파라미터 최적화는 기계 학습 모델의 성능을 향상시키기 위해 중요한 단계입니다. scikit-learn은 많은 기계 학습 알고리즘과 함께 하이퍼파라미터 최적화를 위한 도구를 제공합니다. 이 글에서는 scikit-learn의 GridSearchCV와 RandomizedSearchCV를 사용하여 하이퍼파라미터 최적화를 하는 방법을 알아보겠습니다.

GridSearchCV로 하이퍼파라미터 최적화하기

GridSearchCV는 모든 가능한 조합을 시도하여 최적의 하이퍼파라미터 조합을 찾는 방법입니다. 아래는 GridSearchCV를 사용한 하이퍼파라미터 최적화의 예시입니다.

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier

# 하이퍼파라미터 후보들을 정의합니다.
param_grid = {
    'n_estimators': [100, 200, 300],
    'max_depth': [None, 5, 10],
    'min_samples_split': [2, 4, 8]
}

# 모델과 하이퍼파라미터 후보들을 전달하여 GridSearchCV 객체를 생성합니다.
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)

# 데이터를 학습하고 최적의 하이퍼파라미터 조합을 찾습니다.
grid_search.fit(X_train, y_train)

# 최적의 하이퍼파라미터 조합과 성능을 출력합니다.
print("Best Parameters:", grid_search.best_params_)
print("Best Score:", grid_search.best_score_)

위 예시에서는 RandomForestClassifier를 사용하여 n_estimators, max_depth, min_samples_split 세 가지 하이퍼파라미터를 최적화하는 방법을 보여줍니다. GridSearchCV 객체를 생성할 때 param_grid에 하이퍼파라미터 후보들을 정의합니다. cv 매개변수는 교차 검증 횟수를 의미합니다.

RandomizedSearchCV로 하이퍼파라미터 최적화하기

RandomizedSearchCV는 GridSearchCV와 달리 모든 가능한 조합을 시도하지 않고 무작위로 하이퍼파라미터 조합을 선택하여 최적화합니다. 아래는 RandomizedSearchCV를 사용한 하이퍼파라미터 최적화의 예시입니다.

from sklearn.model_selection import RandomizedSearchCV
from sklearn.svm import SVC

# 하이퍼파라미터 후보들을 정의합니다.
param_dist = {
    'C': [1, 10, 100],
    'kernel': ['linear', 'poly', 'rbf']
}

# 모델과 하이퍼파라미터 후보들을 전달하여 RandomizedSearchCV 객체를 생성합니다.
random_search = RandomizedSearchCV(SVC(), param_dist, cv=5)

# 데이터를 학습하고 최적의 하이퍼파라미터 조합을 찾습니다.
random_search.fit(X_train, y_train)

# 최적의 하이퍼파라미터 조합과 성능을 출력합니다.
print("Best Parameters:", random_search.best_params_)
print("Best Score:", random_search.best_score_)

위 예시에서는 SVC를 사용하여 C와 kernel 두 가지 하이퍼파라미터를 최적화하는 방법을 보여줍니다. RandomizedSearchCV 객체를 생성할 때 param_dist에 하이퍼파라미터 후보들을 정의합니다. GridSearchCV와의 차이점은 하이퍼파라미터 후보들을 모두 시도하는 것이 아니라 무작위로 선택한다는 것입니다.

결론

scikit-learn의 GridSearchCV와 RandomizedSearchCV를 사용하면 기계 학습 모델의 성능을 향상시키기 위해 하이퍼파라미터 최적화를 쉽게 수행할 수 있습니다. GridSearchCV는 가능한 모든 조합을 시도하고, RandomizedSearchCV는 무작위로 선택하여 최적의 조합을 찾습니다. 적절한 하이퍼파라미터 조합을 찾아 모델을 튜닝하는 것은 모델의 성능을 높이는데 중요한 역할을 합니다.

참고 자료