Python에서의 하이퍼파라미터 튜닝
Alex Scriven
Data Scientist
지금까지는 모두 비정보 탐색이었습니다:
비정보 탐색: 하이퍼파라미터 튜닝의 각 반복이 이전 반복에서 학습하지 않는 경우.
이 덕분에 병렬화가 가능하지만, 효율적이지는 않습니다.
지금까지의 프로세스:

대안 방법:

기본 정보 기반 탐색 방법론:
거칠고 무작위로 시작해, 반복적으로 범위를 좁혀 정밀 탐색합니다.
프로세스:
(3) 대신 그리드 탐색 전 무작위 탐색을 더 할 수도 있습니다.
거칠게부터 정밀하게 튜닝의 장점:
성과가 낮은 공간에 시간을 낭비할 필요가 없습니다!
참고: 단일 모델이 아니라 배치 단위로 정보가 쌓입니다.
다음 하이퍼파라미터 범위 예시를 보겠습니다:
max_depth_list 1~65min_sample_list 3~17learn_rate_list 0.01~150 사이 150개 값가능한 모델은 몇 개입니까?
combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
무작위 탐색을 500개 조합에만 수행해 봅니다.
정확도 점수를 다음과 같이 그립니다:

좋은 모델은 어떤 것이었나요?
상위 결과:
| max_depth | min_samples_leaf | learn_rate | accuracy |
|---|---|---|---|
| 10 | 7 | 0.01 | 96 |
| 19 | 7 | 0.023355705 | 96 |
| 30 | 6 | 1.038389262 | 93 |
| 27 | 7 | 1.11852349 | 91 |
| 16 | 7 | 0.597651007 | 91 |
max_depth 대비 정확도 점수를 시각화해 봅시다:

min_samples_leaf는 8 미만이 더 좋음

learn_rate는 1.3 초과에서 성능 저하

1차 반복에서 얻은 사실:
max_depth 8~30learn_rate 1.3 미만min_samples_leaf는 8 미만이 좋을 듯다음은? 지금까지의 정보로 무작위 또는 그리드 탐색을 다시 수행합니다!
참고: 이는 이변량 분석만입니다. 한 그래프에서 여러 하이퍼파라미터(3, 4개 이상)를 볼 수도 있으나, 본 과정 범위를 벗어납니다.
Python에서의 하이퍼파라미터 튜닝