[python] 랜덤서치(Random Search)
머신 러닝 모델을 최적화하기 위해 주어진 하이퍼파라미터 공간에서 최적의 조합을 찾는 과정은 매우 중요합니다. 이러한 과정에서 랜덤서치(Random Search) 알고리즘은 매우 유용한 방법 중 하나입니다. 랜덤서치는 말 그대로 주어진 하이퍼파라미터 범위 내에서 무작위로 조합을 선택하여 모델 성능을 평가하고, 최적의 조합을 찾는 방식입니다.
랜덤서치 알고리즘 동작 원리
- 랜덤하게 설정한 하이퍼파라미터를 사용하여 모델을 학습시킵니다.
- 학습된 모델의 성능(예를 들어 정확도)을 측정합니다.
- 다른 랜덤한 조합의 하이퍼파라미터를 선택하여 모델을 학습시키고, 성능을 측정합니다.
- 2-3단계를 미리 정한 시도 횟수만큼 반복합니다.
- 가장 좋은 성능을 보여준 하이퍼파라미터 조합을 최적의 조합으로 선택합니다.
예시 코드
import random
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
# 하이퍼파라미터 범위 설정
C_range = [0.01, 0.1, 1, 10, 100]
gamma_range = [0.001, 0.01, 0.1, 1, 10]
# 최적의 조합을 저장할 변수 초기화
best_score = 0
best_params = {}
# 랜덤서치 시도 횟수 설정
num_trials = 10
# 랜덤서치 알고리즘 수행
for _ in range(num_trials):
# 랜덤하게 하이퍼파라미터 선택
C = random.choice(C_range)
gamma = random.choice(gamma_range)
# SVM 모델 생성
model = SVC(C=C, gamma=gamma)
# 교차검증을 통한 모델 평가
scores = cross_val_score(model, X, y, cv=5)
avg_score = scores.mean()
# 옵티마이저
if avg_score > best_score:
best_score = avg_score
best_params['C'] = C
best_params['gamma'] = gamma
# 최적의 조합 출력
print("Best combination:", best_params)
print("Best score:", best_score)
위 코드에서 C_range
와 gamma_range
에는 탐색하고자 하는 하이퍼파라미터의 범위를 설정합니다. num_trials
는 랜덤서치를 수행할 횟수를 결정합니다. 랜덤서치 알고리즘을 반복하면서 최적의 조합을 찾아갑니다. 평가 지표인 평균 정확도가 이전까지의 최고 성능보다 높은 경우, 해당 조합을 최적의 조합으로 업데이트합니다.