학습 모델 적합 시
예측치를 산정할 경우 각 클래스에 속할 확률값을 반환
XGBoost는 트리 기반의 앙상블 학습에서 가장 각광받고 있는 알고리즘 중 하나.
GBM(GradientBoosstModel)에 기반을 하고 있으면서 GBM의 실행 시간 및 과적합 규제가 없는 부분등의 문제를 해결한 학습모델.
병렬 CPU 환경에서 분산 처리가 가능하기 때문에 기존 모델보다 수행 시간이 단축된다.
C/C++로 구현된 독립 라이브러리이기 때문에 sklearn과의 코드 진행이 다소 다르다.
사이킷런과 다른 점은 학습/테스트를 위한 DMatrix를 생성한다는 점이고, DMatrix는 numpy 입력 파라미터를 받아 만들어지는 XGBoost만의 전용 dataset이다. 주요 입력 파라미터는 daata와 labell이다.
!! 주의feature_names를 설정하지 않으면 나중에 알아보기 어려움(버전에 따라 list가 아닌 경우가 있음) !!
학습 모델 적합 시
예측치를 산정할 경우 각 클래스에 속할 확률이 아니라 클래스의 분류 결과를 반환
XGBoost 라이브러리를 sklearn과의 호환을 위해 Wrappering한 클래스
sklearnwrapper에서는 전용 데이터를 생성할 필요가 없음.
기존의 DataFrame 형식을 사용 가능
최적의 하이퍼 파라미터 추출을 목표
주요 일반 파라미터| 파라미터명 | 설명 |
|---|---|
| booster | gbtree(tree based model) 또는 gblinear(linear model) 선택, default는 gbtree |
| silent | default는 0이며, 출력 메세지를 나타내고 싶지 않을 경우 1로 설정 |
| nthread | CPU의 실행 스레드 개수를 조정하며, default는 CPU의 전체 스레드를 다 사용하는 것이다. 멀티 코어/스레트 CPU 시스템에서 전체 CPU를 사용하지 않고 일부 CPU만 사용해 ML 애플리케이션을 구동하는경우에 변경 |
주요 부스터 파라미터| 파라미터명 | 설명 |
|---|---|
| learning_rate (eta) | 학습률. 0에서 1 사이의 값을 지정하며 부스팅 스텝을 반복적으로 수행할 때 업데이트되는 학습률 값기본 xgboost를 이용할 경우 default는 0.3이고 사이킷런 래퍼 클래스를 이용할 경우 eta는 learning_rate 파라미터로 대체되며, default는 0.1이다. |
| 보통은 0.01 ~ 0.2 사이의 값을 선호 | |
| n_estimators(num_boost_rounds) | 부스팅 반복 횟수 |
| min_child_weight | 트리에서 추가적으로 가지를 나눌지를 결정하기 위해 필요한 데이터들의 |
| weight 총합, min_child_weight가 클수록 분할을 자제한다. 과적합을 조절하기위해 사용된다.(기본값=1) | |
| min_split_loss(gamma) | 트리의 리프 노드를 추가적으로 나눌지를 결정할 최소 손실 감소 값이다. 해당 값보다 큰 손실(loss)이 감소된 경우에 리프 노드를 분리한다. |
| 값이 클수록 과적합 감소 효과가 있다.(기본값=0) | |
| max_depth | 트리 기반 알고리즘의 max_depth와 같다. 0을 지정하면 깊이에 제한이 없다. max_depth가 높으면 특정 피쳐 조건에 특화되어 룰 조건이 만들어지므로 과적합 가능성이 높아지며 보통은 3~10 사이의 값을 적용(기본값=6) |
| sub_sample(subsample) | 트리가 커져서 과적합되는 것을 제어하기 위해 데이터를 샘플링하는 비율을지정한다. sub_sample=0.5로 지정하면 전체 데이터의 절반을 트리를 생성하는데 사용한다. 0에서 1사이의 값이 가능하나 일반적으로 0.5 ~ 1 사이의 값을 사용(기본값=1) |
| colsample_bytree | GBM의 max_feature와 유사하다. 트리 생성에 필요한 피처(column)를 임의로샘플링하는 데 사용된다. 매우 많은 피처가 있는 경우 과적합을 조정하는 데 적용(default=1) |
학습 태스크 파라미터objective최솟값을 가져야할 손실 함수
| 함수 | 설명 |
|---|---|
binary:logitic | 이진 분류일 때 적용한다. |
multi:softmax | 다중 분류일 때 적용한다. 손실함수가 multi:softmax 일 경우에는 label 클래스의 개수인 num_class parameter를 지정해야 한다. |
multi:softprob | multi:softmax와 유사하나 개별 label 클래스의 해당되는 예측 확률을 반환한다. |
eval_metricrmse, 분류일 경우에는 error이다.0.01 ~ 0.1). 그리고 eta 값을 낮추면 num_round(또는 n_estimator)는 반대로 높여준다.