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 낮추기