DataScience/MachineLearning

[트리계열 이해하기] 5. XGBoost

mkk4726 2023. 7. 29. 12:56

2023.07.29 - [DataScience/MachineLearning] - [트리계열 이해하기] 4. GBM

 

[트리계열 이해하기] 4. GBM

1. 기본 컨셉 Gradient Boosting Machine 은 이름처럼 Boosting 계열의 트리 모델입니다. 2023.07.28 - [DataScience/MachineLearning] - [트리계열 이해하기] 3. AdaBoost [트리계열 이해하기] 3. AdaBoost AdaBoost는 이름에서 알

mkk4726.tistory.com

GBM은 뛰어난 성능을 보이지만 학습 속도가 굉장히 오래 걸린다는 문제가 있습니다.

그림1. 시간 단축

 

eXtreme Gradient Boosting, XGBoost는 이러한 GBM의 문제를 해결한 optimized version of GBM이라고 볼 수 있습니다.

그림2. XGBoost의 장점

XGBoost는 어떻게 성능을 향상시켰는지에 대해 정리해보겠습니다.

 


1. Approximate Algorithm

이 전까지는 Information Gain이 가장 높은 피처를 찾기 위해 많은 시간 소비해야했고, 

그 이유 중 하나는 피처 간에는 병렬처리가 가능하지만,

한 피처에서 최적인 기준을 찾는 과정에서는 병렬처리가 불가능하기 때문입니다.

 

이를 개선하기 위해 XGBoost에서는 Bucket을 도입했습니다.

그림3. Bucket으로 분할

전체 데이터셋을 정렬한 후 여러 개의 Bucket으로 나누고 , 그 버켓 안에서의 최적을 구한 후 그 값끼리 비교해 최적의 점을 찾습니다.

버킷끼리 계산을 하기에 이 과정은 병렬처리를 가능하게 해줍니다.

 

최적 점을 찾은 후의 과정에 따라 "Global(Per Tree)"와" Local(Per Split)"으로 나뉩니다.

그림4. Global

글로벌한 방법은 처음 나눈 버킷을 그대로 가져가면서 분할하는 것을 말합니다.

그림5. Local

로컬한 방법은 매 분기마다 버킷을 새로 나누는 것을 말합니다.

그림6. Global vs Local

글로벌한 방법은 버켓의 수가 많아야 로컬과 비슷한 성능을 보입니다. ( $# of bucket = \frac{1}{\epsilon}$ )

 


2. Column Wise sorting

더보기
그림7. CSC Format

1번 과정에서 처음에 정렬할 때 많은 시간이 소요되는데, CSC Format으로 정렬하게 되면 data마다 index를 가지고 있어 처음에 정렬을 하면, 그 이후에는 정렬할 필요가 없게 됩니다. 

 

이를 통해 정렬하는 시간을 단축시켰습니다.

 


3. Cache-aware access

더보기

데이터를 처리하는데는 CPU 근처에 있을 수록 빠르고, Hard Disk에 가까울 수록 느려지게 됩니다.

- HDD < SSD < Main Memory < Cache

 

따라서 XGBoost는 Cache 용량을 조절하며, 최대한 Cache를 이용하도록 해 성능을 향상시켰다고 합니다.

 


 

4. Sparsity-Aware Split Finding

XGBoost는 효율적으로 Missing Data(또는 0)를 처리하고 이는 XGBoost가 자주 사용되는 이유 중 하나입니다.

특히 One-hot encoding 시 대부분이 값이 0인 sparse matrix가 생성되게 되는데 이를 잘 처리합니다.

 

그 원리는 간단합니다.

" 결측치나 0인 값들을 한 쪽으로 몰아놓는 것 " 입니다.

 

그림8. Handling Missing Value 원리

그림 8처럼 왼쪽으로 몰아넣는 것과 오른쪽으로 몰아넣는 것을 비교해 최적인 방향을 찾고,

그 방향대로 데이터를 몰아넣어 분류합니다.

 

단순한 컨셉이지만, 이를 통해 뛰어난 성능을 보인다고 합니다.

 


5. Overfitting 방지

 

앞서 Random Forest에서 한 것처럼, 데이터와 피처를 랜덤하게 뽑아 학습을 진행합니다.

이 과정에서 noise에 강건해지고 오버피팅을 방지할 수 있습니다. 

 

또한 트리의 깊이에 패널티를 부여해 오버피팅을 방지합니다.

 


그림9. XGBoost 정리

정리하자면 XGBoost는 GBM을 최적화한 모델입니다.

Bucket 단위로 IG를 계산해 병렬처리를 계산하도록 했고, 캐쉬를 효율적으로 처리해 연산 속도를 높였습니다.

결측치를 한쪽 방향을 정해 몰아넣어 처리할 수 있습니다.

트리 깊이에 패널티를 부여하고, 데이터와 피처를 랜덤으로 샘플링해 사용해서 오버피팅을 방지합니다.

 

정형데이터에서는 killer model로써 사용되는, 아주 뛰어난 모델이라고 합니다.

 

 

 


- 출처

그림2 : https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.linkedin.com%2Fpulse%2Fxgboost-classifier-algorithm-machine-learning-kavya-kumar&psig=AOvVaw2S-Wg0xdcWD4zftCrsugeO&ust=1690687679415000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCJiOrsb8soADFQAAAAAdAAAAABAE

그림3:

 

- Reference

패스트캠퍼스, 초격차 패키지 : 50개 프로젝트로 완벽하게 끝내는 머신러닝