Grid Search는 머신러닝 모델의 최적의 하이퍼파라미터를 찾기 위한 방법 중 하나이다. 하이퍼파라미터는 모델 학습 전에 설정되는 파라미터로, 모델의 성능에 큰 영향을 미친다. Grid Search는 지정된 하이퍼파라미터의 모든 조합을 시도하여, 가장 좋은 성능을 내는 조합을 찾는 과정이다.
성능 최적화: 모델의 성능을 극대화하기 위해 최적의 하이퍼파라미터 조합을 찾을 수 있다.
자동화: 수동으로 하이퍼파라미터를 조정하는 것은 시간이 많이 걸리고 비효율적이다. Grid Search를 통해 이 과정을 자동화할 수 있다.
객관성: 모든 가능한 조합을 시도하기 때문에, 선택의 주관성을 배제하고 객관적인 결과를 얻을 수 있다.
1. 하이퍼파라미터 범위 설정
2. 탐색 실행
3. 최적 조합 선택
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 데이터 로드
data = load_iris()
X = data.data
y = data.target
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 하이퍼파라미터 그리드 설정
param_grid = {
'max_depth': [3, 5, 7, 10],
'n_estimators': [10, 50, 100, 200]
}
# 모델 설정
rf = RandomForestClassifier()
# Grid Search 수행
grid_search = GridSearchCV(rf, 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_)
Best Parameters: {'max_depth': 7, 'n_estimators': 200}
Best Score: 0.9583333333333334
Random Search는 하이퍼파라미터 튜닝을 위한 방법 중 하나로, 가능한 하이퍼파라미터의 값들 중에서 무작위로 선택하여 모델을 평가하는 방식이다. Grid Search와 유사하게 추정기(estimator), 조정할 하이퍼파라미터 및 각 하이퍼파라미터의 값 범위를 정의한다. 하지만, 모든 조합을 시도하는 대신 무작위로 선택하여 평가한다.
1. 하이퍼파라미터의 중요성
예시: 신경망에서 학습률(learning rate)은 모델의 학습 속도와 정확도에 중요한 역할을 하지만, 배치 크기(batch size)는 상대적으로 덜 중요할 수 있다.
2. 확률적 접근
예시: 만약 100개의 다른 하이퍼파라미터 조합이 있고 그 중 10개만이 좋은 결과를 낼 수 있다고 할 때, Grid Search는 모든 100개의 조합을 평가해야 하지만, Random Search는 무작위로 조합을 선택하기 때문에 좋은 결과를 낼 수 있는 조합을 더 적은 시도로 발견할 가능성이 있다.
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from scipy.stats import randint
# 데이터 로드 및 분할
data = load_iris()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 하이퍼파라미터 분포 설정
param_dist = {
'max_depth': randint(1, 11),
'n_estimators': randint(10, 201)
}
# 모델 설정
rf = RandomForestClassifier()
# Random Search 수행
random_search = RandomizedSearchCV(rf, param_distributions=param_dist, n_iter=20, cv=5)
random_search.fit(X_train, y_train)
# 최적의 파라미터와 점수 출력
print("Best Parameters: ", random_search.best_params_)
print("Best Score: ", random_search.best_score_)
Best Parameters: {'max_depth': 3, 'n_estimators': 134}
Best Score: 0.95
| 기준 | Grid Search | Random Search |
|---|---|---|
| 정의 | 가능한 모든 하이퍼파라미터 조합을 시스템적으로 탐색하여 최적의 조합을 찾는 방법 | 무작위로 하이퍼파라미터의 조합을 선택하여 최적의 조합을 찾는 방법 |
| 탐색 방식 | 체계적이고 완전한 탐색 | 비체계적이고 무작위 탐색 |
| 계산 비용 | 매우 높음 (모든 가능한 조합을 탐색해야 함) | 상대적으로 낮음 (무작위로 조합을 선택하기 때문에) |
| 시간 효율성 | 낮음 (탐색해야 할 공간이 클 경우) | 높음 (적은 수의 시도로 좋은 결과를 얻을 수 있음) |
| 적용 상황 | 하이퍼파라미터의 수가 적고, 탐색 공간이 작을 때 유리 | 하이퍼파라미터의 수가 많거나, 탐색 공간이 클 때 유리 |
| 결과의 예측성 | 높음 (모든 조합을 탐색하기 때문에 최적의 결과를 보장) | 낮음 (최적의 결과를 찾을 수도 있고 아닐 수도 있음) |
| 장점 | 최적의 조합을 확실하게 찾을 수 있음 | 계산 비용과 시간을 크게 절약할 수 있음 |
| 단점 | 계산 비용과 시간이 매우 많이 듦 | 최적의 조합을 놓칠 수 있음 |