안녕하세요!
오늘은 그리드 탐색을 랜덤 탐색으로 바꾸는 작업을 해보겠습니다.
오늘 하는 것도 약 50분 정도는 잡고 하셔야 될 것 같네요. 제 가상머신 기준( 메모리 4G, CPU 4개 할당 ) 40.7min 소요되었습니다.
sklearn.model_selection의 RandomizedSearchCV를 임포트하고,
param_distribs에 kernel을 linear와 rbf로 설정합니다.
하이퍼파라미터 C는 reciprocal, gamma는 expon을 설정합니다.
ssvm_reg는 서포트 벡터회귀 그대로이나, 탐색방법을 RandomizedSearchCV로 합니다.
https://docs.scipy.org/doc/scipy/reference/stats.html 을 참고하시면
여러 분포들을 볼 수 있습니다.
일단, reciprocal은 상호 연속적인 랜덤변수라고 하네요.
위의 정의된 확률밀도함수는 표준화된 폼이며, 분포를 Shift하거나 Scale하려면 loc와 scale 파라미터를 사용하라고 합니다.
expon은 지수 분포를 나타냅니다.
긴 시간을 거쳐서 랜덤 탐색을 통해 탐색된 최상 모델의 5-겹교차 검증 점수는 54767.99정도로 나오네요.
(일반적으로도 랜덤 탐색이 그리드 탐색보다는 좋은 모델을 탐색한다고 합니다.)
rnd_search.best_params_로 최상의 하이퍼파라미터가 무엇인지 보면,
이번엔 rbf커널의 C : 157055, gamma : 0.265 정도로 탐색되었습니다.
여기서 사용된 scale=1.0의 지수분포를 살펴봅시다.
앞에 몰려있는 값들을 log하면 대부분의 값들이 exp(-2), exp(+2)사이에 있음을 알 수 있습니다.
C에 사용된 분포는 매우 다른데요. 주어진 범위안에서 균등한 분포로 샘플링됩니다.
그래서 로그분포가 거의 일정하게 나타납니다.
따라서, 이런 분포는 원하는 스케일이 정확히 무엇인지 모를 때 사용하면 좋습니다.
즉 reciprocal()함수는 하이퍼파라미터 스케일에 대해 전혀 감이 없을 때 사용하고,
지수 분포는 하이퍼파라미터 스케일을 어느 정도 알고 있을 때 사용하는 것이 좋습니다.
블로그 이 글의 상당 부분은 [핸즈온 머신러닝, 한빛미디어/오렐리앙 제롱/박해선] 서적을 참고하였습니다. 나머지는 부수적인 함수나 메서드에 대해 부족한 설명을 적어두었습니다. 학습용으로 포스팅 하는 것이기 때문에 복제보다는 머신러닝에 관심이 있다면 구매해보시길 추천합니다. 도움이 되셨다면 로그인 없이 가능한 아래 하트♥공감 버튼을 꾹 눌러주세요! 출처
'## 오래된 게시글 (미관리) ## > Python (Linux)' 카테고리의 다른 글
19. Python - 전체 데이터 준비와 예측을 하나의 파이프라인으로 만들기 (0) | 2018.11.28 |
---|---|
18. Python - 중요한 특성을 선택하는 변환기를 파이프라인에 추가하기 (0) | 2018.11.28 |
16. Python - 서포트 벡터 머신을 통한 하이퍼 파라미터 설정 (0) | 2018.11.26 |
15. Python - 테스트 세트로 평가하기 (0) | 2018.11.25 |
14. Python - 모델 세부 튜닝 (0) | 2018.11.25 |