인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Soosang Eom님의 프로필 이미지
Soosang Eom

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

Xgboost Parameter 조정

작성

·

657

0

안녕하세요.
먼저 이러한 강의를 만들어 주셔서 감사인사를 꼭 전하고 싶습니다.
강의 책과 함께, 강사님의 강의를 열심히 듣고 있습니다.

제가 데이터를 활용해서 XgBoost 알고리즘을 적용하고 있습니다. Python 뿐 아니라, R에서 적용하여 사용중인데, depth 와 Tree 범위에 대한 궁금증이 생겨 문의드립니다.

1) parameter를 최대화하더라도 과적합(overfit)이 일어나지 않도록 하기 위해 범위를 대략적으로나마 알고 싶습니다.
(이론적으로 depth: 6~10 등등.. 있지만)
Test 데이터에서 성능의 격차가 크게 떨어지지 않는다면, Depth나 Ntree 등 parameter 조정을 계속해서 진행해도 될까요? (예를 들어, Depth를 10 이상, Ntree: 800 이상)

2) Xgboost 나 LightGBM 등 부스팅 알고리즘에 대해 좀더 깊이 공부해보고 싶은데, 추천하시는 논문이나 자료가 있는지 궁금합니다. 


강의를 들으면서 궁금증도 있고, 프로젝트나 실습 문제를 풀면서 의구심이 들어 질문 남깁니다.

감사합니다.

끝까지 완강하겠습니다 :)

답변 3

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까, 잘 듣고 계시다니 오히려 제가 감사드립니다.

1) 트리 부스팅 계열 알고리즘 xgboost, lightgbm에 딱 범위가 정해진 하이퍼 파라미터는 없습니다. 

lightgbm의 경우 일반적으로 알고리즘의 특성상 Depth가 깊습니다만, xgboost는 Depth가 깊다고 성능이 나아진다는 보장은 없습니다. 또한 learning rate를 작게하고 Ntree를 크게 하는 (1000이상) 방법도 있지만 성능 향상을 보장하지는 않습니다.

트리 부스팅 계열에서 매우 최적으로 모델을 도출해야 할 경우 일반적으로는 유틸리티를 이용하여 최적 파라미터를 도출합니다. 

사이킷런이나 다른 유틸리티를 이용하여 하이퍼 파라미터를 튜닝하는 방법은 크게 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

Baysian Optimization 을 이용한 하이퍼 파라미터 방법이 제 Github에 있습니다.

파이썬 머신러닝 완벽 가이드 Repos에서 4장으로 들어가시면

https://github.com/chulminkw/PerfectGuide/tree/master/4%EC%9E%A5

Baysian_Optimization_패키지사용법.pptx 파일은 사용법을 ppt로 정리한 것이며
BaysianOptimization을 이용한 산탄데르 고객 만족 하이퍼 파라미터 튜닝.ipynb 은 산탄데르 고객 만족 예측을 Baysian으로 최적화 한것입니다.

도움이 되셨으면 합니다.

감사합니다.

0

권 철민님의 프로필 이미지
권 철민
지식공유자

네, parameter 조정은 당연한 것입니다. 그리고 얼마나 극단적으로 조정하실지는 잘 모르겠으나, 어떻게 하시든 큰 문제는 없을것이라 생각됩니다.

감사합니다.

0

Soosang Eom님의 프로필 이미지
Soosang Eom
질문자

강사님, 너무나 상세한 설명 진심으로 다시 감사드립니다!

답변에 대해 추가로 질문 하나 드리자면, 
"트리 부스팅 계열 알고리즘 xgboost, lightgbm에 딱 범위가 정해진 하이퍼 파라미터는 없습니다. "

Q) 현재 진행하는 것이 XgBoost 를 활용해서 Multiclass(다중 분류) 모델을 만들고 있는데, Test 성능에서 크게 떨어지지 않는다면 parameter 조정을 해도 합리적으로 봐도 될까요? (분석 업계에서 받아들일 만한지)

(사실, 피처 엔지니어링을 더 시도해봐야겠지만, 동일한 조건에서 Parameter를 극단적으로 조정을 해도 '업계'에 계시는 분들이 어떻게 받으들이실까 궁금하여 질문 드립니다.)

* 아직, 많이 미숙하여 질문이 형편없을 수 있으나, 강사님의 우문현답 기다리겠습니다.

다시 한번 상세한 답변에 정말 감사드립니다.

Soosang Eom님의 프로필 이미지
Soosang Eom

작성한 질문수

질문하기