Grid Search와 Random Search 정리

수현·2024년 2월 19일

Machine Learning

목록 보기
1/7

Grid Search란?

Grid Search는 머신러닝 모델의 최적의 하이퍼파라미터를 찾기 위한 방법 중 하나이다. 하이퍼파라미터는 모델 학습 전에 설정되는 파라미터로, 모델의 성능에 큰 영향을 미친다. Grid Search는 지정된 하이퍼파라미터의 모든 조합을 시도하여, 가장 좋은 성능을 내는 조합을 찾는 과정이다.

Grid Search의 장점

  1. 성능 최적화: 모델의 성능을 극대화하기 위해 최적의 하이퍼파라미터 조합을 찾을 수 있다.

  2. 자동화: 수동으로 하이퍼파라미터를 조정하는 것은 시간이 많이 걸리고 비효율적이다. Grid Search를 통해 이 과정을 자동화할 수 있다.

  3. 객관성: 모든 가능한 조합을 시도하기 때문에, 선택의 주관성을 배제하고 객관적인 결과를 얻을 수 있다.

Grid Search 사용

1. 하이퍼파라미터 범위 설정

  • 탐색할 하이퍼파라미터와 그 범위를 지정한다.

2. 탐색 실행

  • 지정된 범위의 모든 조합에 대해 모델을 학습시키고, 성능을 평가한다. 이때, 일반적으로 교차 검증(cross-validation) 방법을 사용하여 모델의 성능을 평가한다.

3. 최적 조합 선택

  • 모든 조합을 시도한 후, 가장 좋은 성능을 보인 하이퍼파라미터 조합을 선택한다.

Grid Search 코드 (Iris)

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란?

Random Search는 하이퍼파라미터 튜닝을 위한 방법 중 하나로, 가능한 하이퍼파라미터의 값들 중에서 무작위로 선택하여 모델을 평가하는 방식이다. Grid Search와 유사하게 추정기(estimator), 조정할 하이퍼파라미터 및 각 하이퍼파라미터의 값 범위를 정의한다. 하지만, 모든 조합을 시도하는 대신 무작위로 선택하여 평가한다.

Random Search의 특징

1. 하이퍼파라미터의 중요성

  • 모든 하이퍼파라미터가 모델 성능에 같은 영향을 미치지 않는다. 특정 하이퍼파라미터는 다른 것보다 성능 향상에 더 큰 기여를 할 수 있다.

예시: 신경망에서 학습률(learning rate)은 모델의 학습 속도와 정확도에 중요한 역할을 하지만, 배치 크기(batch size)는 상대적으로 덜 중요할 수 있다.

2. 확률적 접근

  • Random Search는 가능한 하이퍼파라미터의 조합 중에서 무작위로 선택함으로써, 중요한 하이퍼파라미터의 최적 조합을 더 빨리 찾을 수 있는 확률적 이점을 제공한다.

예시: 만약 100개의 다른 하이퍼파라미터 조합이 있고 그 중 10개만이 좋은 결과를 낼 수 있다고 할 때, Grid Search는 모든 100개의 조합을 평가해야 하지만, Random Search는 무작위로 조합을 선택하기 때문에 좋은 결과를 낼 수 있는 조합을 더 적은 시도로 발견할 가능성이 있다.


Random Research 코드 (Iris)

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의 차이점 정리

기준Grid SearchRandom Search
정의가능한 모든 하이퍼파라미터 조합을 시스템적으로 탐색하여 최적의 조합을 찾는 방법무작위로 하이퍼파라미터의 조합을 선택하여 최적의 조합을 찾는 방법
탐색 방식체계적이고 완전한 탐색비체계적이고 무작위 탐색
계산 비용매우 높음
(모든 가능한 조합을 탐색해야 함)
상대적으로 낮음
(무작위로 조합을 선택하기 때문에)
시간 효율성낮음
(탐색해야 할 공간이 클 경우)
높음
(적은 수의 시도로 좋은 결과를 얻을 수 있음)
적용 상황하이퍼파라미터의 수가 적고, 탐색 공간이 작을 때 유리하이퍼파라미터의 수가 많거나, 탐색 공간이 클 때 유리
결과의 예측성높음
(모든 조합을 탐색하기 때문에 최적의 결과를 보장)
낮음
(최적의 결과를 찾을 수도 있고 아닐 수도 있음)
장점최적의 조합을 확실하게 찾을 수 있음계산 비용과 시간을 크게 절약할 수 있음
단점계산 비용과 시간이 매우 많이 듦최적의 조합을 놓칠 수 있음
profile
데이터 분석 공부중:)

0개의 댓글