[python] 랜덤서치(Random Search)

머신 러닝 모델을 최적화하기 위해 주어진 하이퍼파라미터 공간에서 최적의 조합을 찾는 과정은 매우 중요합니다. 이러한 과정에서 랜덤서치(Random Search) 알고리즘은 매우 유용한 방법 중 하나입니다. 랜덤서치는 말 그대로 주어진 하이퍼파라미터 범위 내에서 무작위로 조합을 선택하여 모델 성능을 평가하고, 최적의 조합을 찾는 방식입니다.

랜덤서치 알고리즘 동작 원리

  1. 랜덤하게 설정한 하이퍼파라미터를 사용하여 모델을 학습시킵니다.
  2. 학습된 모델의 성능(예를 들어 정확도)을 측정합니다.
  3. 다른 랜덤한 조합의 하이퍼파라미터를 선택하여 모델을 학습시키고, 성능을 측정합니다.
  4. 2-3단계를 미리 정한 시도 횟수만큼 반복합니다.
  5. 가장 좋은 성능을 보여준 하이퍼파라미터 조합을 최적의 조합으로 선택합니다.

예시 코드

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_rangegamma_range에는 탐색하고자 하는 하이퍼파라미터의 범위를 설정합니다. num_trials는 랜덤서치를 수행할 횟수를 결정합니다. 랜덤서치 알고리즘을 반복하면서 최적의 조합을 찾아갑니다. 평가 지표인 평균 정확도가 이전까지의 최고 성능보다 높은 경우, 해당 조합을 최적의 조합으로 업데이트합니다.

참고 자료