본문 바로가기
Machine Learning

XGBoost(eXtra Gradient Boost)

by rubyda 2020. 4. 26.
728x90

 

XGBoost는 트리 기반의 앙상블 학습에서 가장 주목받고 있는 알고리즘 중 하나입니다. XGBoost는 GBM의 단점인 느린 수행 시간 과적합 규제(Regularization) 부재 등의 문제를 해결해서 매우 주목을 받고 있습니다. 

XGBoost의 장점들을 정리해보도록 하겠습니다.

 

  • 뛰어난 예측 : 분류와 회귀 영역에서 뛰어난 예측 성능을 발휘합니다.
  • 빠른 수행 시간: XGBoost는 병렬 수행 및 다양한 기능으로 수행되어 GBM에 비해 빠른 수행 성능을 보장할 수 있습니다.
  • 과적합 규제: XGBoost는 과적합 규제 기능이 있어 과적합에 강한 내구성을 가질 수 있습니다.
  • 나무 가지치기: 다른 GBM과 마찬가지로 XGBoost도 max_depth 파라미터로 분할 깊이를 조정하기도 하지만 나무 가지치기(tree pruning)으로 더 이상 이득이 없는 분할들을 가지치기 해서 분할 수를 줄일 수 있는 장점이 있습니다.
  • 내장된 교차 검증: 내부적으로 교차 검증을 수행하여 최적화된 반복 수행 횟수를 가질 수 있습니다.
  • 결손값 자체 처리: 결손값을 자체적으로 처리할 수 있는 기능이 있습니다.

 

파이썬 래퍼 XGBoost 하이퍼 파라미터


XGBoost는 GBM의 하이퍼 파라미터들과 유사하지만 여기에 조기 중단(early stopping)과 과적합 규제를 위한 기능이 추가되어 있습니다.

 

하지만 파이썬 래퍼 XGBoost 모듈사이킷런 래퍼 XGBoost 모듈의 일부 하이퍼 파라미터는 약간 다르게 작용을 하기 때문에 주의가 필요합니다. 여기서 다르게 작용의 의미는 동일한 기능을 의미하는 파라미터이지만 사아킷런의 파라미터의 범용화된 Naming Rule에 따라서 파라미터명이 달라짐을 의미합니다. 

 

▷ 먼저 파이썬 래퍼 XGBoost의 하이퍼 파리미터를 알아보겠습니다.

 

일반 파라미터

  • booster(디폴트는 gbtree): gbtree or gblinear 중 선택합니다.

  • nthread(디폴트는 전체 스레드를 사용): CPU 실행 스레드 개수입니다.

 

부스터 파라미터

  • eta(디폴트는 0.3): GBM에서 학습률과 같은 파라미터입니다. 보통은 0.01~0.2사이의 값을 선호합니다.

  • num_boost_rounds: GBM에서 n_estimators와 같은 파리미터입니다. 
  • min_child_weight(디폴트는 1): 과적합을 조절하는데 사용이 되며 너무 큰값을 설정하게 되면 과소적합이 될 수 있습니다.
  • gamma(디폴트는 0): 트리의 리프 노드를 추가적으로 나눌지 결정할 최소 손실 감소 값입니다. 값이 클수록 과적합 감소 효과가 있습니다. 
  • max_depth(디폴트는 6): 트리 기반 알고리즘과 같은 파라미터입니다. 보통은 3~10 사이의 값을 사용하며 과적합 방지로 사용이 됩니다.
  • sub_sample(디폴트는 1): 데이터를 샘플링하는 비율을 정하여 줍니다. 보통 0.5~1사이의 값을 사용합니다.
  • colsample_bytree(디폴트는 1): 트리 생성에 필요한 피처를 임의로 샘플링 하는데 사용됩니다.
  • lambda(디폴트는 1): L2 Regularization 적용 값을 의미합니다. 
  • alpha(디폴트는 0): L1 Regularization 적용 값을 의미합니다.
  • scale_pos_weight(디폴트는 1): 클래스가 불균형하게 이루어진 경우 균형을 유지하여 줍니다. 

 

학습 태스크 파라미터

  • objective: 최솟값을 가져야할 손실 함수를 정의하여 줍니다. 이진 분류와 다중 분류에 따라 달라집니다. 

  • binary:logistic: 이진 분류일 때 적용합니다.

  • multi:softmax: 다중 분류일 때 적용합니다. 

  • multi:softprob: multi:softmax와 유사하지만 개별 레이블 클래스의 해당되는 예측 확률을 반환하여 줍니다.

  • eval_metric: 검증에 사용되는 함수를 정의하여 줍니다. 디폴트 값은 회귀:rmse, 분류: error 입니다.

  • rmse: Root Mean Square Error

  • mae: Mean Absolute Error

  • logloss: Negative log-likelihood

  • error: Binary classification error rate

  • merror: Multiclass classification error rate

  • mlogloss: Multiclass logloss

  • auc: Area under the curve

정말 뛰어난 알고리즘일수록 파라미터를 튜닝할 필요가 적다고 합니다. 하지만 파라미터 튜닝에 들이는 시간에 비해서 성능 향상 효과가 높지 않은 경우가 대부분 이라고 합니다.

 

 

만약 과적합이 심하다면??


  • eta 값을 낮춰보자: 만약 eta값을 낮추게 된다면 num_estimators는 반대로 높여줘야 합니다.
  • max_depth을 낮춰보자.
  • min_child_weigh을 높여보자.
  • gamma 값을 높여보자.

 

이번 시간에는 XGBoost(eXtra Gradient Boost)의 하이퍼 파라미터까지 알아보았습니다. 다음 포스팅에서는 파이썬 래퍼 XGBoost 모듈과 사이킷런 래퍼 XGBoost 모듈을 예제를 통해서 알아보도록 하겠습니다.

 

 

 

Reference


파이썬 머신러닝 완벽가이드

'Machine Learning' 카테고리의 다른 글

XGBoost 실습 - 사이킷런 래퍼 -  (0) 2020.04.27
XGBoost 실습 - 파이썬 래퍼 -  (0) 2020.04.27
GBM(Gradient Boosting Machine)  (1) 2020.04.26
랜덤 포레스트(Random forest)  (0) 2020.04.26
앙!상블  (0) 2020.04.21