[오늘의 공부]
오늘은 Gradient Boosting 중 많이 사용하는 모델 중 하나인 XGBoost(Extreme Gradient Boosting, 이하 xgb)에 대해 공부해보고자 한다.
▶ xgb란
2016년도에 처음 출시되었으며, gradient boosting의 철학을 따라가지만, 이것을 어떻게 하면 빠르고 대용량 데이터를 처리할 수 있을까에서 시작되었다.
XGBoost란 “Extreme Gradient Boosting”을 의미하며 GBM의 성능, 스케일, 속도를 최적화하기 위해 개발된 알고리즘으로 빠른 수행, 스케일업 하기 위해 병렬처리를 수행한다.
단점으로는 gbm에 비해 성능이 조금 떨어질 수 있다는 점이다.
▶ 알고리즘 특징
1) split finding algorithm
- 기존의 의사결정나무는 exact greedy algorithm를 사용함.
- exact greedy algorithm는 모든 split 포인트를 탐색하기 때문에 항상 최적의 split을 찾을 수 있음.
- 예시를 보자면 총 40개 데이터를 스플릿하여 gradient를 39번 계산함.
- 여기서 단점은 데이터가 한번에 메모리에 로드되지 않으면 수행 및 병렬 처리가 불가함.
- 이것을 보완하기 위한 알고리즘이 approximate algorithm임.
- approximate algorithm의 첫 번째 단계는 전체 데이터의를 정렬 시킨 뒤 분포를 보고 퍼센트를 통해 일정한 개수로 분할함. 여기서 분할한 부분을 bucket이라 부르는데 이 알고리즘은 각각의 버켓 따로 스플릿 포인트를 찾음.
- approximate algorithm의 예시를 보자면 각 데이터를 버켓으로 묶어 버켓별 gradient를 계산하며 병렬처리가 가능함. 3*10 = 총 30번 계산
- 위에서처럼 버켓별로 split을 하는데 Global variant와 Local variant가 있음.
- Global variant는 tree기준으로 스플릿하며, 베스트 스플릿 포인트에서 스플릿을 통해 left child / right child 노드로 나눴을 때 기존과 동일하게 split하여 진행함.
- local variant의 경우 스플릿 기준으로 진행하며, 부모 노드에서 버켓의 개수가 10개면 lc, rc 각각 10개로 나눔.
- 하이퍼파라미터를 eps라고 하며 그림을 통한 성능을 비교함.
- exact greedy와 global eps=0.05가 거의 같이 올라감 / local eps는 조금 더 크게 잡아도 됨.
- global을 쓸 때는 eps를 훨씬 작게 잡아야 함.
2) Sparsity-Aware Split Finding(결측치를 효율적으로 처리하고자 하는 관점)
- 실제 데이터의 경우 결측치가 많으며, 결측치가 아니더라도 0이 과도하게 많은 경우도 있음.
- 이러한 문제점을 해결하기 위해 각 스플릿마다 디폴트 디렉션(default direction)을 학습과정에서 찾아내며, 새로운 데이터가 들어왔을 때 어떤 값이 결측치면 디폴트 디렉션으로 보냄.
- 상단의 이미지처럼 결측치가 있는 데이터를 오른쪽으로 모아 스플릿을 진행하여 베스트 스플릿 포인트를 찾음.
- 이후 결측치를 왼쪽으로도 몰아 베스트 스플릿을 찾아 비교하여 효과가 좋은 쪽을 디폴트 디렉션으로 지정함.
- 이렇게 계산함으로써 계산 시간을 많이 줄일 수 있음.
3) System Design for Efficient Computing(트리 병렬화)
- 데이터가 커질수록 시간이 오래 걸리는 이유는 sorting임.
- 이러한 문제점을 해결하기 위해 컬럼와이즈 포맷으로 데이터 저장하고 학습 전 피처 벨류들에 의해 미리 sorting함.
- 미리 지정하여 학습 중간에 sorting을 안해도 되기 때문에 시간을 단축할 수 있음.
▶ 알고리즘 장점
- 병렬 처리로 학습하여 GBM(Gradient Boost Machine)대비 수행시간이 빠르다.
- 표준 GBM의 경우 과적합 규제기능이 없었으나, XGBoost는 자체에 과적합 규제 기능올 ・ 좀 더 강한 내구성을 지닌다.
- 분류와 회귀영역에서 뛰어난 예측 성능을 발휘한다.
- Early Stopping을 통해 작업을 조기 종료할 수 있다.
- 병렬처리로 학습, 분류 속도가 빠르다.
- 다양한 옵션을 제공하며 커스터마이징이 용이하다.
- 결측치를 내부 자체적으로 처리해준다.
▶ 알고리즘 수식
▶ booster parameter
- 모형 성능에 가장 영향을 미치는 파라미터
- 모델의 과적합 등의 이슈 발생 시 주로 튜닝의 대상이 되는 파라미터
파라미터 | 기본값 | 설명 |
eta | 0.3 | - 일반적으로 학습률 (learning rate) 로 불리우는 파라미터임. - weak learner 의 반영 수준을 나타냄. - 범위는 0~1 로 클 수록 모형의 업데이트 속도는 빨라짐. - 클수록 과적합의 이슈 발생 가능성이 높음. |
num_boost_around | 10 | 학습에 활용될 weak learner의 반복 수 |
min_child_weight | 1 | - leaf node 에 포함되는 최소 관측치의 수를 의미함. - 작은 값을 가질수록 과적합 발생 가능성이 높음 과적합 조절 용도로 사용됨. |
gamma | 0 | - leaf node 의 추가 분할을 결정할 최소 손실 감소값. 해당값보다 손실이 크게 감소할 때 분리함. - 값이 클수록 과적합 감소 효과가 있음. |
max_depth | 6 | - 트리의 최대 깊이를 설정 0을 지정하면 깊이의 제한이 없음. - 과적합에 가장 민감하게 작용하는 파라미터. 과적합 조절 용도로 사용됨. |
sub_sample | 1 | - 학습 시 데이터 샘플링 비율을 지정하는 파라미터이며, 과적합 제어 효과가 있음. - 일반적으로 0.5~1 사이의 값을 사용함. - 범위는 0~1 사이임. |
colsample_bytree | 1 | - 트리 생성에 필요한 feature의 샘플링에 사용 feature가 많을 때 과적합 조절에 사용함. - 범위는 0~1 사이임. |
lambda | 1 | - L2 Regularization 적용 값임. - feature 개수가 많을 때 적용 검토를 진행하며, 클수록 과적합 감소 효과가 있음. |
alpha | 0 | - L1 Regularization 적용 값임. - feature 개수가 많을 때 적용 검토를 진행하며, 클수록 과적합 감소 효과 |
scale_pos_weight | 1 | 불균형 데이터셋의 균형을 유지함. |
▶ booster parameter
- 학습에 활용되는 객체 함수, 모형의 평가를 위한 지표 등을 설정하는 파라미터
파라미터 | 기본값 | 설명 |
objective | reg:squarederror | - reg:squarederror : 회귀제곱오차 - reg:linear : 회귀 - binary:logistic : 이진분류 - multi:softmax : 다중분류, 클래스 반환 - multi:softprob : 다중분류, 확률 반환 |
eval_metric | object에 따라 바뀜 | - rmse : Root Mean Squared Error - mae : mean absolute error - logloss : Negative log-likelihood - error : binary classification error rate - merror : multiclass clasification error rate - mlogloss : Multiclass logloss - auc : Area Under Curve |
▶ 참고자료
'개발 관련 공부 > 머신러닝' 카테고리의 다른 글
CatBoost란? (0) | 2025.01.08 |
---|---|
LGBM(Light Gradient Boosting Machine)이란? (1) | 2025.01.07 |
Gradient Boosting Machine(gbm)란? (4) | 2025.01.04 |
Random Forest(랜덤포레스트)란? (0) | 2024.12.25 |
bagging(배깅)이란? (0) | 2024.12.25 |