Machine Learning/Supervised Learning

[Supervised Learning][Ensemble][Boosting] XGBoost (eXtream Gradient Boosting)

데이터 세상 2022. 10. 11. 16:04

XGBoost(eXtream Gradient Boosting)

Gradient Boosting 알고리즘을 분산환경에서도 실행할 수 있도록 구현해놓은 라이브러리

Gradient Boosting 알고리즘에 overfitting 방지를 위한 기법이 추가된 알고리즘

Regression, Classification 문제를 모두 지원하며, 성능과 자원 효율이 좋아서, 인기 있는 알고리즘 중 하나

  • Tree Boosting 기법을 활용한 모델
  • tree boosting 방식에 경사 하강법을 통해 최적화하는 방법
  • 연산량을 줄이기 위해 의사결정 트리를 구성할 때 병렬 처리를 사용해 빠른 시간에 학습 가능

 


XGBoost 장점과 단점

장점

GBM (Gradient Boosting Machine) 대비 빠른 수행시간

  • 병렬 처리로 학습, 분류 속도가 빠르다

 

overfitting 규제(Regularization)

  • 표준 GBM의 경우 overfitting 규제 기능이 없으나, XGBoost는 자체에 과적합 규제 기능으로 강한 내구성을 지님

 

분류와 회귀영역에서 뛰어난 예측 성능 발휘

  • CART(Classification and Regression Tree) 앙상블 모델을 사용

 

Early Stopping 기능 있음

다양한 옵션을 제공하며 customizing이 용이

 

단점

작은 데이터에 대하여 overfitting 가능성이 있다

해석이 어렵다

  • 모든 앙상블 계열 알고리즘이 갖고 있는 근원적인 문제이며, 각 입력 변수에 대하여 출력 변수가 어떻게 변하는지에 대한 해석이 어렵다

 


XGBoost Hyper-parameters

일반 파라미터

부스팅을 수행할 때 트리를 사용할지, 선형 모델을 사용할지 등을 고른다

 

booster [default: gbtree]

  • 어떤 부스터 구조를 쓸지 결정
  • 의사결정기반 모형(gbtree), 선형모델(gblinear), dart가 있다.

 

n_jobs

  • XGBoost를 실행하는 데 사용되는 병렬 스레드 수

 

verbosity [default: 1]

  • 유효한 값은 0, 1(warning), 2(information), 3(debug)

 

부스터 파라미터

선택한 부스터에 따라서 적용할 수 있는 파라미터 종류가 다르다

 

learning_rate [default: 0.3]

  • learning rate가 높을수록 overtiffing 하기 쉽다

 

n_estimators [default: 100]

  • 생성할 weak learner의 수
  • learning_rate가 낮을 땐, n_estimators를 높여야 과적합이 방지된다.

 

max_depth [default: 6]

  • 트리의 maximum depth이다.
  • 적절한 값이 제시되어야 하고 보통 3~10 사이값이 적용된다.
  • max_depth가 높을수록 모델의 복잡도가 커져 overfitting 하기 쉽다

 

min_child_weight [default: 1]

  • 관측치에 대한 가중치 합의 최소를 말한다
  • 값이 높을수록 overfitting이 방지된다.

 

gamma [default: 0]

  • 리프노드의 추가분할을 결정할 최소손실 감소값
  • 해당값보다 손실이 크게 감소할 때 분리한다.
  • 값이 높을수록 overfitting이 방지된다.

 

subsample [default: 1]

  • weak learner가 학습에 사용하는 데이터 샘플링 비율
  • 보통 0.5~1 사용
  • 값이 낮을수록 overfitting이 방지

 

colsample_bytree [default: 1]

  • 각 tree별 사용된 feature의 percentage이다.
  • 보통 0.5~1 사용
  • 값이 낮을수록 overfitting 방지된다.

 

lambda [default:1, alias: reg_lambda]

  • 가중치에 대한 L2 Regularization 적용 값
  • feature 개수가 많을 때 적용을 검토
  • 이 값이 클수록 overfitting 감소 효과

 

alpha [default: 0, alias: reg_alpha] 

  • 가중치에 대한 L1 Regularization 적용 값
  • feature 개수가 많을 때 적용을 검토
  • 이 값이 클수록 overfitting 감소 효과

 

학습 과정 파라미터

학습 시나리오를 결정한다

objective [default: reg=squarederror]

  • reg
    • squared error
    • 제곱 손실이 있는 회귀
  • binary
    • logistic (binary-logistic classification)
    • 이항 분류 문제 로지스틱 회귀 모형으로 반환값이 클래스가 아니라 예측 확률
  • multi: softmax
    • 다향 분류 문제의 경우 소프트맥스를 사용해서 분류하는데 반환되는 값이 예측확률이 아니라 클래스임
    • 또한 num_class도 지정해야 함
  • multi: softprob
    • 각 클래스 범주에 속하는 예측확률을 반환
  • count
    • poison (count data posion regression) 등 다양

 

eval_metric

  • 모델의 평가 함수를 조정하는 함수다.
  • 설정한 objective 별로 기본설정값이 지정되어 있다.
  • rmse: root mean square error
  • mae: mean absolute error
  • logloss: negative log-likelihood
  • error: Binary classification error rate (0.5 threshold)
  • merror: Multiclass classification error rate
  • mlogloss: Multiclass logloss
  • auc: Area under the curve
  • map (mean average precision)등, 해당 데이터의 특성에 맞게 평가 함수를 조정한다.

 

seed [default: 0]

  • 재현가능하도록 난수를 고정시킴.

 

민감하게 조정해야 하는 것

  • booster 모양
  • eval_metric(평가함수) / objective(목적함수)
  • eta 
  • L1 form (L1 레귤러라이제이션 폼이 L2보다 아웃라이어에 민감하다.)
  • L2 form

 

overfitting 방지를 위해 조정해야 하는 것

  • learning rate 낮추기 → n_estimators은 높여야함
  • max_depth 낮추기
  • min_child_weight 높이기
  • gamma 높이기
  • subsample, colsample_bytree 낮추기

 


References

반응형