본문 바로가기
Machine Learning

XGBoost 개념 및 초모수 튜닝 (Hyperparameter Tuning)

by 무적물리 2021. 5. 28.

최근 XGBoost를 사용해서 프로젝트를 수행 중에 있습니다. 완벽에 가까운 프로젝트를 수행하고자 이번 포스팅에서는 XGBoost의 개념과 초모수 튜닝에 대해서 여러분과 공유하고자 합니다.

 

사실, 해당 포스팅은 개인적인 메모장이라고 보아도 무방합니다. 하지만, 많은 개발자 여러분들에게 도움이 되었으면 좋겠습니다. XGBoost는 굉장히 매력적인 머신러닝 알고리즘임과 동시에 파워풀한 퍼포먼스를 보여줍니다. 적극 사용하시는 것을 추천합니다.

 

 

 

XGBoost 개념

XGBoost를 한마디로 표현하자면 Decision Tree를 앙상블로 구현해 정확한 예측 성능을 보여주는 머신러닝 모델입니다. 앙상블은 배깅(Bagging)과 부스팅(Boosting)으로 구분하는데, XGBoost는 부스팅에 해당합니다. 또한, XGBoost는 classification, Regression 모두 가능합니다.

 

XGBoost의 근원은 Gradient Boosting Algorithm (GBM)에 있지만, GBM은 과적합과 학습 속도의 문제가 있기 때문에 GBM의 단점을 보완한 형태로 XGBoost가 개발되었습니다. XGBoost는 병렬 처리 연산이며, 모델 최적화를 위치 경사 하강법을 사용합니다.

 

부스팅(Boosting) 이란?

부스팅은 앞서 말한 바와 같이 앙상블 기법 중에 하나입니다. 부스팅의 기본 개념은 순차적으로 Weak Learner들을 결합해서 모델의 성능을 높인다는 것에 있습니다.

 

랜덤 샘플링된 학습 데이터로 첫 번째 Weak Learner를 학습시키고, 에러를 반영해 두 번째 Weak Learner를 학습시키며 여기에서 발생한 에러로 세 번째 Weak Learner를 학습시키며, 이를 지정한 Decision Tree 개수만큼 반복한다고 이해하면 됩니다.

 

부스팅 방법을 통해 다음과 같은 순서로 모델이 학습됩니다.

  • 학습 데이터 랜덤 샘플링
  • 1st Weak Learner 학습
  • 1st Tree Error 반영 2nd Weak Learner 학습
  • 2nd Tree Error 반영 3rd Weak Learner 학습
  • Decision Tress 개수만큼 학습 반복

 

XGBoost 장점

XGBoost에는 많은 장점이 있는데 뛰어난 예측 성능과 빠른 학습 시간입니다. 또한, 과적합(Overfitting)을 컨트롤할 수 있기 때문에 최근 많은 대회에서 사용되고 있습니다. 제가 실제로 적용해봐도 이렇게 매력적인 머신러닝 알고리즘은 처음입니다.

 

XGBoost 장점을 정리하자면 다음과 같습니다.

  • 빠른 학습 속도
  • 정확한 예측, 회귀 성능
  • 과적합 컨트롤
  • 교차 검증 내장
  • 결손 데이터 자체 처리

 

 

 

XGBoost Hyperparameter Tuning

XGBoost에는 다양한 초모수가 존재하며 대부분의 파라미터가 과적합을 컨트롤하기 위해 사용됩니다. XGBoost 주요 초모수를 정리하자면 아래 표와 같으며 참고해서 사용하시면 됩니다. 참고로, 초모수 뒤 괄호 안 숫자는 Default 값입니다.

 

eta (0.3) Learning Rate
범위 : 0~1
통상 범위 : 0.01~0.2
num_boost_around (10) Weak Learner의 수
min_child_weight (1) 가중치 합의 최소
과적합 방지 목적 사용
높으면 과적합 방지
범위 : 0~무한대
gamma (0) Leaf Node 추가 분할 결정 기준
과적합 방지 목적 사용
높으면 과적합 방지
범위 : 0~무한대
max_depth (6) 트리의 깊이
0 지정 시 깊이 제한 없음
낮으면 과적합 방지
범위 : 0~무한대
통상 범위 : 3~10
sub_sample (1) 데이터 샘플링 비율
Weak Learner 별 다른 샘플점 학습
0.5라면 전체 데이터의 절반 샘플링
낮으면 과적합 방지
범위 : 0~1
통상 범위 : 0.5~1
colsample_bytree (1) Feature 샘플링에 사용
Feature 개수가 많을 때 효과적
과적합 방지 목적 사용
낮으면 과적합 방지
범위 : 0~1
통상 범위 : 0.5~1
lambda (1) L2 Regularization 값
Feature 개수가 많을 때 효과적
높으면 과적합 방지
alpha (0) L1 Regularization 값
Freature 개수가 많을 때 효과적
높이면 과적합 방지
scale_pos_weight (1) 불균형 데이터셋의 균형 유지

 

결론적으로, 우리의 목표는 정확도가 높은 회귀 모델이나 예측 모델을 학습시키는 것이며 과적합을 방지해야 합니다. 과적합 방지를 위해서는 위 표에 기재한 바와 같이 초모수를 컨트롤해서 모델을 생성해야 합니다. 다음에 시간이 주어진다면 XGBoost 예제 코드와 함께 초모수 최적화 기법에 대해 포스팅해보도록 하겠습니다.

 

댓글