XGBoost
01) XGBoost 개요
XGBoost는 GBM을 기반으로 두고 있지만, GBM의 가장 큰 단점인 학습 속도를 개선한 모델이다. 아래는 XGBoost의 장점이다. (규제, CPU 병렬 학습 지원 등의 방법으로 속도 향상 / 교재에 따르면 매우 각광받고 있는 알고리즘이라고 함)
- 지도학습에서 뛰어난 예측 성능을 갖는다.
- GBM 대비 빠른 학습 시간
- 과적합 규제(Regularization)
- 데이터 분할 시 무의미한 분할 방지
- XGBoost 내부에 교차검증이 내장되어있고 최적화가 완료되면 조기 중단 기능 제공
- XGBoost 내부에 결측값을 자체적으로 처리할 수 있는 기능 제공
XGBoost는 C언어로 만들어진 라이브러리이다. 하지만 python에서도 해당 라이브러리를 사용할 수 있는 패키지가 있으며 패키지 이름은 xgboost
이다.
XGBoost는 별도의 설치가 필요하다. '관리자 권한으로 실행' 환경으로 command 창을 띄우고 아래 명령어를 입력한다.
conda install -c anaconda py-xgboost
※ 위 방법은 Window 10 기준 설치 방법이다.
XGBoost는 xgboost
패키지 안에 XGBClassifier()
과 XGBRegression()
클래스를 통해 사용할 수 있다.
02) XGBoost 하이퍼파라미터
XGBoost의 하이퍼파라미터는 C로 되어있는 라이브러리를 python 라이브러리로 변경한 버전과, sklearn과의 싱크를 맞춘 버전의 이름이 다르다. 이번 포스팅에서는 전자의 경우를 살펴볼 것이다.
- booster : 트리 기반(=gbtree) 모델과 회귀 기반(=gblinear) 모델 중 선택이 가능하다.
- nthread : CPU 병렬처리에 사용될 CPU 개수를 조정한다.(default는 CPU 전체 사용)
- eta(=learning rate) : 앞서 살펴본 GBM의
learning rate
와 동일한 역할을 한다
- num_boost_rounds(=n_estimators) : 앞서 살펴본 GBM의
n_estimatores
와 동일한 역할을 한다.
- min_child_weight : 트리에서 다음 노드로 분할할지 결정하기 위한 weight 들의 총합을 기준으로 제공한다. 해당 하이퍼파라미터 값이 클수록 분할이 덜 된다.
- gamma : 노드 분할 기준으로 최소 오차 감소 값을 제공한다. 지정된 값보다 오차 감소 폭이 커야 노드를 분할한다.
- max_depth
- sub_sample : GBM의
subsample
과 동일한 역할을 한다.
- colsample : GBM의
max_features
와 유사한 역할을 한다.
- lambda / alpha : L2 규제 / L1 규제를 위한 파라미터이다.
- scalce_pos_weight : imbalance 한 데이터의 균형 유지를 위한 파라미터이다.
- objective : 손실 함수를 지정한다. 주로 모델이 분류하는 클래스가 이진 분류인지, 다중 분류인지에 따라 달라진다.
- 'binary', 'multi:softmax', 'multi:softprob'이 해당 파라미터로 들어올 수 있다.
- eval_metric : 검증에 사용되는 함수를 지정한다. default는 회귀일 경우 rmse, 분류일 경우 error이다.
XGBoost도 트리 기반의 모델이기 때문에 트리의 크기가 과도하게 커지는 것을 방지하는 파라미터가 다수 있는 것을 확인할 수 있다.(물론 booster
를 'gblinear'로 변경하면 회귀 기반 모델이 되지만, 과적합에 대응하려는 장치들을 마련해 두었다는 것)