Python에서의 하이퍼파라미터 튜닝
Alex Scriven
Data Scientist
그리드 서치와 매우 유사합니다:
하지만 그리드 칸을 무작위로 고릅니다.
Bengio & Bergstra (2012):
이 논문은 무작위 시도가 그리드 시도보다 하이퍼파라미터 최적화에 경험적·이론적으로 더 효율적임을 보입니다.
두 가지 핵심 이유:
그리드 서치:

초록 칸 중 하나를 얻을 확률이 95%가 되려면 몇 개의 모델을 실행해야 할까요?
우리의 최상 모델:

하이퍼파라미터 조합을 균등 무작위로 고를 때, 모든 시도를 ‘모두 빗나갈’ 확률을 보겠습니다.
1회차 = 성공 0.05, 빗나감 (1 - 0.05)
일반화하면, n회 시도에서 원하는 지점을 모두 놓칠 확률은 (1-0.05)^n 입니다.
그 구역에 들어갈 확률을 높게(95%) 하려면 시도 횟수는?
이게 무엇을 의미할까요?
기억하세요:
최댓값은 설정한 그리드의 한계 내에서만 좋습니다.
그리드 서치와 공정 비교하려면 같은 모델링 ‘예산’을 사용하세요.
하이퍼파라미터 조합의 무작위 표본을 직접 만들 수 있습니다:
# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in
product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
range(0,len(combinations_list)), 100,
replace=False)
combinations_random_chosen = [combinations_list[x] for x in
random_combinations_index]
하이퍼파라미터 선택을 X, Y 축에 그려 랜덤 서치의 커버리지를 볼 수도 있습니다.

분산 범위는 넓지만 깊게 덮지는 않음을 확인하세요.
Python에서의 하이퍼파라미터 튜닝