【기계 학습】XGboost를 공부해 본다

XGBoost 개요



XGBoost는 "eXtreme Gradient Boosting"의 약자이며 그라디언트 부스팅을 사용한 트리의 앙상블 학습입니다. 그 뛰어난 성능과 속도로부터, Kaggle나 KDDCup등에서 상위의 성적을 수료한 모델에도 자주(잘) 사용되고 있습니다. 실제 2015년의 Kaggle 대회에서는 29의 우승 모델 중, 17 모델이 XGBoost를 사용한 모델이었습니다.

XGBoost 알고리즘



목적 변수의 추정 방법




\widehat {y}_i=\phi \left( x_{i}\right) =\sum ^{K}_{k=i}f_{x}\left( x_{i}\right) ,f_{k}\in F
F =\{f\left( x\right) = 
 W_q \left(x)\right \}\left(q:R^{m}\rightarrow T, w\in R^{T}\right)

$F$는 결정 트리(CART)의 공간을 나타냅니다. 각 트리에서 얻은 점수를 클래스별로 집계하고 $\widehat{y}_i$를 찾습니다. $K$는 점수를 더할 때 사용되는 함수입니다.

모델 평가 및 학습 방법



모델 평가 방법은 다음과 같습니다.
\mathcal{L}(\phi)=\sum_{i} l\left(\hat{y}_{i}, y_{i}\right)+\sum_{k} \Omega\left(f_{k}\right)
\Omega(f)=\gamma T+\frac{1}{2} \lambda\|w\|^{2}


y의 손실은 L1 정규화에 학습한 가중치를 부드럽게 하기 위한 페널티항을 낳은 것입니다.
위 함수의 최적화에 있어서, 통상의 유클리드 공간상의 최적화 기법을 사용할 수 없기 때문에, greedy에 $y_t$를 더하는 것으로, 서서히 최적인 L을 요구해 갑니다.
그렇게 구한 구조 q를 가지는 결정 트리 위의 가중치 w와 그에 대응하는 평가식은 다음과 같이 구해집니다.
w_{j}^{*}=-\frac{\sum_{i \in I_{j}} g_{i}}{\sum_{i \in I_{j}} h_{i}+\lambda}
\tilde{\mathcal{L}}^{(t)}(q)=-\frac{1}{2} \sum_{j=1}^{T} \frac{\left(\sum_{i \in I_{j}} g_{i}\right)^{2}}{\sum_{i \in I_{j}} h_{i}+\lambda}+\gamma T

또한 각 노드의 평가식은
\mathcal{L}_{s p l i t}=\frac{1}{2}\left[\frac{\left(\sum_{i \in I_{L}} g_{i}\right)^{2}}{\sum_{i \in I_{L}} h_{i}+\lambda}+\frac{\left(\sum_{i \in I_{R}} g_{i}\right)^{2}}{\sum_{i \in I_{R}} h_{i}+\lambda}-\frac{\left(\sum_{i \in I} g_{i}\right)^{2}}{\sum_{i \in I} h_{i}+\lambda}\right]-\gamma

에서 요구됩니다.
또한 XGBoost는 과학을 막기 위해 Shrinkage라는 기술과 feature subsampling이라는 기술을 사용합니다. Shrinkage는 오래된 정보에서 학습을 줄이는 방법입니다.
이상과 같은 테크닉을 사용하는 것으로, XGBoost에서는 효율적이고 정확하게 학습을 하는 것이 가능해지고 있습니다.

자세한 내용은 여기을 참조하십시오.

XGBoost 파라미터



자주 지정하는 파라미터를 소개합니다.


매개변수
개요

기본


부스터
약학 악기의 종류
gbtree, dart (트리 모델) gblinear (선형 모델)
gbtree

verbosity
로그 출력
0(무), 1(경고), 2(info), 3(debug)
1

validate_parameters
입력된 파라미터가 사용되었는지 확인
false/true
false

nthread
병렬 처리 스레드 수
int
CPU 최대

eta
Shrinkage의 크기. 학습률 lr과 동등. 클수록 보수적인 모델이 된다.
[0,1]
0.3

gamma
새 노드를 작성하는 데 필요한 손실 감소의 최소값. 클수록 보수적인 모델이 된다.
[0, inf]
0

max_depth
나무의 깊이. 클수록 과학습한다.
int
6

min_child_weight
각 child node에서 w의 합계의 최소값. 클수록 보수적인 모델이 된다.
[0,inf]
0

subsample
트리를 만드는 데 사용되는 샘플의 크기.
(0, 1]
1

sampling_method
서브 샘플 선택 방법
uniform, gradient_based
uniform

람다
L2 정규화항
[0, inf]
1

알파
L1 정규화항
[0, inf]
0

objective
학습의 목적
reg:squarederror, reg:squaredlogerror, reg:logistic, binary:logistic,multi:softmax...
reg:squarederror

eval_metric
모델 평가 방법
rmse, rmsle, mae, logloss, error
objective에 대응

seed
난수 seed
seed
0


자세한 내용은 여기을 참조하십시오.

XGBoost를 파이썬에서 실행


from xgboost.sklearn import XGBClassifier

model = XGBClassifier(
 learning_rate =0.01,
 n_estimators=5000,
 max_depth=4,
 min_child_weight=6,
 gamma=0,
 subsample=0.8,
 colsample_bytree=0.8,
 reg_alpha=0.005,
 objective= 'binary:logistic',
 nthread=4,
 scale_pos_weight=1,
 seed=27
)

model.fit(X_train, y_train)
y_pred = model.predict(X_test)

자세한 내용은 여기을 참조하십시오.

좋은 웹페이지 즐겨찾기