[ML/Ensemble] XGBoost
- XGBoost는 앙상블의 부스팅 기법의 한 종류
- 분류에 있어서 일반적으로 다른 머신러닝보다 뛰어난 예측을 보임
- GBM에 기반하고 있지만, early stoppping을 통해 시간 단축하고 과적합 규제 부재 의 문제를 해결함
- CPU환경에서 병렬 학습이 가능해서 기존 GBM보다 빠르게 학습을 완료할수 있음
- 핵심 라이브러리는 C/C++로 작성되어있어서 파이썬 패키지 역할은 대부분 C/C++ 라이브러리를 호출 하는 것임
- 독자적인 XGBoost 프레임워크기반 파이썬래퍼 XGBoost(xgboost)와 사이킷런과 연동되는 사이킷럿 래퍼 XGBoost(XGBClassifier , XGBRegressor)가 존재함
- 위 두가지 방법으로 XGBoost를 사용할 수 있음
당연하게도 XGBoost 프레임워크 기반 패키지는 sklearn 고유 아키텍처가 적용될수 없고 다양한 유틸리티와 함께 사용될 수 없습니다. eg. cross_val_score , GridSearchCV
- 위 두가지 방법으로 XGBoost를 사용할 수 있음
XGBoost 장점
| 항목 | 설명 |
|---|---|
| 뛰어난 예측성능 | 일반적으로 분류와 회귀 영역에서 좋은 예측성능을 보임 |
| GBM 대비 빠른 수행시간 | 일반적으로 GBM은 순차적으로 Weak learner가 가중치를 증감하는 방법으로 학습하기때문에 전반적으로 속도가 느림; 하지만 XGBoost는 병렬수행으로 인해 빠른 수행 성능을 보장함 ; 다만 아쉽게도 GBM보다는 빠르다는 것이지 다른 머신러닝 알고리즘에 비해서 빠른 편에 속하진 않음. |
| 과적합 규제 regularization |
표준 GBM의; 경우 과적합 규제 기능이 없으나, XGBoos는 자체에 과적합 규제 기능으로 좀더 강한 내구성을 가짐 |
| 가지치기 Tree pruning |
일반적으로 GBM은 분할 시 부정 손실이 발생하면 분할을 더 이상 수행하지 않지만, 이러한 방식도 자칫 지나치게 많은 분할을 발생 할 수 있음; XGBoost도 max_depth 파라미터로 분할 깊이를 조정하기도 하지만 tree pruning으로 더이상 긍정 이득이 없는 분할을 가지치기 해서 분할 수 를 더 줄이는 추가적인 장점 보유 |
| 자체 내장된 교차 검증 | 반복 수행 시 마다 내부적으로 학습 데이터 세트와 평가 데이터 세트에 대한 교차 검증을 수행해 최적화된 반복 수행 횟수를 가질 수 있음; 지정된 반복 횟수가 아니라 교차검증을 통한 평가 데이터 세트의 평가값이 최적화 되면 반복을 중간에 멈출수 잇는 조기 중단 기능(early stopping) 존재 |
| 결손값 자체 처리 | XGBoost는 결손값을 처리할 수 있음 |
Python Wrapper XGBoost Tutorial
1 | |
sklearn Wrapper XGBoost Tutorial
1 | |
Parameter
파이썬 래퍼 XGBoost모듈과 사이킷런 래퍼 XGBoost 모듈의 일부는 Naming Rule으로 인해 파라미터 명이 다르다.
Hyperparameter turning
만약, 과적합 문제가 존재한다면 아래와 같이 적용해보자.
- learning rate 을 낮추자 (0.01~0.1)
learning rate를 낮춘다면 num_round (n_estimators)는 반대로 높여줘야한다. - max_depth를 낮춘다.
- min_child_weight를 높인다.
- gamma 값을 높인다.
- subsample, colsmaple_bytree를 조정해 트리가 너무 복잡하게 생성되는것을 막아 과적합 문제에 도움이 될수있음
Practice
- Practice XGBoost (Python Wrapper, scikit learn Wrapper) link
Reference
- 파이썬 머신러닝 완벽가이드 서적
- [hwi] 님의 [ML] XGBoost 이해하고 사용하자 link