하이퍼파라미터 최적화: 랜덤 검색 대 그리드 검색

Beginner

This tutorial is from open-source community. Access the source code

소개

머신 러닝에서 하이퍼파라미터는 데이터로부터 학습되지 않고, 훈련 전에 설정되는 매개변수입니다. 적절한 하이퍼파라미터를 선택하는 것은 머신 러닝 모델의 높은 정확도를 달성하는 데 필수적입니다. 하이퍼파라미터 최적화의 두 가지 일반적인 방법은 랜덤 검색과 그리드 검색입니다. 이 실습에서는 확률적 경사 하강법 (SGD) 훈련을 사용하는 선형 서포트 벡터 머신 (SVM) 의 하이퍼파라미터 최적화를 위해 이 두 가지 방법을 비교할 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근할 수 있습니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

필요한 라이브러리 가져오기 및 데이터 로드

필요한 라이브러리를 가져오고 scikit-learn 에서 숫자 데이터셋을 로드하는 것으로 시작합니다.

import numpy as np
from time import time
import scipy.stats as stats
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
from sklearn.datasets import load_digits
from sklearn.linear_model import SGDClassifier

## 숫자 데이터셋 로드
X, y = load_digits(return_X_y=True, n_class=3)

SVM 모델 생성

SGD 훈련을 사용하는 선형 SVM 모델을 생성합니다.

## SGD 훈련을 사용하는 SVM 모델 생성
clf = SGDClassifier(loss="hinge", penalty="elasticnet", fit_intercept=True)

하이퍼파라미터 최적화를 위한 랜덤 검색

랜덤 검색을 사용하여 하이퍼파라미터 공간을 탐색하고 SVM 모델에 대한 최적의 하이퍼파라미터를 찾습니다.

## 샘플링할 파라미터 및 분포 지정
param_dist = {
    "average": [True, False],
    "l1_ratio": stats.uniform(0, 1),
    "alpha": stats.loguniform(1e-2, 1e0),
}

## 랜덤 검색 실행
n_iter_search = 15
random_search = RandomizedSearchCV(
    clf, param_distributions=param_dist, n_iter=n_iter_search
)

start = time()
random_search.fit(X, y)
print(
    "RandomizedSearchCV 가 %d개의 후보 파라미터 설정에 %.2f 초가 소요되었습니다."
    % ((time() - start), n_iter_search)
)

## 결과 출력
report(random_search.cv_results_)

그리드 검색을 통한 하이퍼파라미터 최적화

그리드 검색을 사용하여 하이퍼파라미터 공간을 탐색하고 SVM 모델에 대한 최적의 하이퍼파라미터를 찾습니다.

## 검색할 파라미터 지정
param_grid = {
    "average": [True, False],
    "l1_ratio": np.linspace(0, 1, num=10),
    "alpha": np.power(10, np.arange(-2, 1, dtype=float)),
}

## 그리드 검색 실행
grid_search = GridSearchCV(clf, param_grid=param_grid)

start = time()
grid_search.fit(X, y)

print(
    "GridSearchCV 가 %d개의 후보 파라미터 설정에 %.2f 초가 소요되었습니다."
    % (len(grid_search.cv_results_["params"]), time() - start)
)

## 결과 출력
report(grid_search.cv_results_)

요약

이 실험에서는 SGD 학습을 사용한 선형 SVM 모델의 하이퍼파라미터 최적화를 위해 랜덤 검색과 그리드 검색을 비교했습니다. 두 방법 모두 동일한 하이퍼파라미터 공간을 탐색했지만, 랜덤 검색이 훨씬 빠르다는 것을 발견했습니다. 각 방법으로 찾은 최적의 하이퍼파라미터는 성능이 비슷했지만, 랜덤 검색은 노이즈로 인해 약간 성능이 떨어질 수 있습니다. 실제로는 동시에 너무 많은 하이퍼파라미터를 검색하지 않고 가장 중요한 하이퍼파라미터만 검색할 것입니다.