작성
·
619
3
안녕하세요.
하이퍼 파라미터 관련 튜닝에 대해 질문이 있습니다.
랜덤 포레스트 설명하실 때 GridSearchCV를 통해 최적 하이퍼 파라미터를 구했습니다.
하지만 최적 하이퍼 파라미터를 구하기 위한 params들은 처음 수동으로 세팅을 해주었습니다. 가령 max_depth: [6, 8, 10, 12] 등으로 말이죠.
하이퍼 파라미터를 튜닝하는 건 이렇듯 감(?)에 의해 하는 수밖에 없는 건가요?
물론 모든 하이퍼 파라미터마다 굉장히 작은 값부터 굉장히 큰 값까지 다 GridSearchCV를 돌리면 나오긴 하겠지만 물리적 시간 제약상 그렇게 못할 겁니다.
이런 상황에서는 Try and Error방식, 휴리스틱한 방식으로 초기 하이퍼 파라미터 몇개를 설정해주고 GridSearchCV를 해야만 하는 건지 궁금합니다.
결론적으로 말씀드려, 최적의 하이퍼 파라미터를 구하는 방식이 있는건지? 아니면 경험과 노하우에 의해 '이정도 값이 보통 성능이 좋더라' 라는 감에 의해 결정해야하는건지 궁금합니다.
매번 감사합니다.
답변 5
4
안녕하십니까,
일단 트리기반 알고리즘이 아닌 경우 어느 정도 감으로 하이퍼 파라미터를 돌리기도 합니다.
그런데 매우 최적으로 모델을 도출해야 할 경우 일반적으로는 유틸리티를 이용하여 최적 파라미터를 도출합니다.
사이킷런이나 다른 유틸리티를 이용하여 하이퍼 파라미터를 튜닝하는 방법은 크게 3가지가 있습니다.
1. 사이킷런의 GridSearchCV를 이용합니다. 일반적으로 GBM 계열(XGBoost, LightGBM 포함) 알고리즘은 하이퍼 파라미터가 많습니다. 이 경우 많은 경우의 수를 사용해야 하기 때문에 수행 시간이 너무 오래 걸리기에 가장 최적의 값을 찾기가 어려울 수 있습니다.
데이터가 크면 GridSearchCV에서 하이퍼 파라미터의 가능한 조합 수를 모두 테스트 하려면 매우 오랜 시간이 소모 되기 때문에 GridSearchCV로 일단 중요 하이퍼 파라미터를 대강 튜닝한 뒤에 세부적으로 다시 튜닝하는 방안을 사용합니다. 또 Xgboost, LightGBM을 이용할 경우 early_stopping_rounds 수를 매우 작게 주어서 튜닝 시간을 줄이는 방법도 택합니다.
2. 사이킷런의 RandomizedSearchCV를 이용합니다. RandomizedSearchCV는 이름에서 유추할 수 있듯이 하이퍼 파라미터의 특정 범위를 설정하면 이 범위내에서 중복을 배제하고 랜덤하게 값을 샘플링합니다. 구글링하셔서 쉽게 RandomizedSearchCV의 사용법을 익히 실 수 있으며 아래 주소에 RandomizedSearchCV를 잘 설명한 책 내용이 있으니 참조하시기 바랍니다.
https://books.google.co.kr/books?id=CDWuDwAAQBAJ&pg=PA321&lpg=PA321&dq=RandomizedSearchCV+%EC%84%A4%EB%AA%85&source=bl&ots=weq3_S1OWR&sig=ACfU3U0kDrhZO6VlZ1O1SJqWVq_vSVt4TQ&hl=ko&sa=X&ved=2ahUKEwiro7SfgeTlAhVZ62EKHeEBDsIQ6AEwBXoECAkQAQ#v=onepage&q=RandomizedSearchCV%20%EC%84%A4%EB%AA%85&f=false
3. 마지막으로 사용되는 방법은 Bayesian Optimization 하이퍼 파라미터 튜닝을 지원하는 유틸리티를 사용하는 것입니다. GridSearchCV나 RandomizedSearchCV는 어떻게 사용하던 파라미터의 조합 수가 커지만 매우 많은 튜닝 시간이 걸리기 때문에 실전에서 적용하기 어려운 부분이 존재합니다. 특히 이전 단계에서 성능이 개선된 하이퍼 파라미터를 기반으로 성능 개선의 방향성을 잡는것는 것이 효율적인데, 위 방법들은 순차적으로 가능한 모든 파라미터를 대입하면서 최적 파라미터를 찾아내야 하기 때문에 최적 하이퍼 파라미터 탐색의 비효율성이 존재합니다.
대표적인 Bayesian Optimization 패키지는 bayes_opt 패키지가 있습니다. 해당 패키지에 대한 자세한 설명은 아래 github에서 자세히 되어 있습니다.
https://github.com/fmfn/BayesianOptimization
bayes_opt 패키지의 BayesianOptimization 클래스를 이용하는데, 약간 코딩이 좀 더 필요합니다.
자세한 사용법은 보다 많은 설명이 필요하므로 제가 이번주내에 별도의 주피터 노트북으로 설명 드리겠습니다.
일단 간략한 사용법은 구글링하셔서 살펴보시고, 아래에 간략한 사용법을 기재한 사이트가 있으니 참조하시기 바랍니다.
https://gist.github.com/mohit-sinha/be3f2999eb21d1992d03b7590fe2d88b
감사합니다.
2
2
안녕하십니까,
Baysian Optimization 을 이용한 하이퍼 파라미터 방법을 제 Github에 올렸습니다.
파이썬 머신러닝 완벽 가이드 Repos에서 4장으로 들어가시면
https://github.com/chulminkw/PerfectGuide/tree/master/4%EC%9E%A5
Baysian_Optimization_패키지사용법.pptx 파일은 사용법을 ppt로 정리한 것이며
BaysianOptimization을 이용한 산탄데르 고객 만족 하이퍼 파라미터 튜닝.ipynb 은 산탄데르 고객 만족 예측을 Baysian으로 최적화 한것입니다.
감사합니다.
2
0
저도 궁금했던 질문과 상세한 답변 덕분에 지나가면서 읽고 많은 도움 받았습니다.
덧붙여서 개인적으로 다른 질문 여쭙고 싶은데 혹시 spdlqj9777@naver.com 로 연락주실 수 있으신가요?
감사합니다.
질문이 신백균, 답변이 권철민 이라니....
요즘 제가 제일 감사하는 두분이네요. ㅋㅋㅋㅋ
두분 모두 감사드려요 ^^