XG Boost
- XGBoost 란?
- XGBoost는 eXtreme Gradient Boosting의 약자임 (극한 변화도 부스팅)
- Boosting 기법을 이용하여 구현한 알고리즘은 Gradient Boosting Machine이 대표적임
- 이 알고리즘은 Computing 적으로 병렬 학습이 지원되도록 구현함
- Regression, Classification 문제를 모두 지원하며, 성능과 자원 효율에 장점이 있음
- XGBoost의 장점
- GBM 대비 빠른 수행시간
- 병렬 처리로 학습, 분류 속도가 빠름
- 과적합을 방지하는 Penalty Term 존재
- 지도학습에서 뛰어난 학습 능력을 보임
- Missing Values(결측치)를 내부적으로 처리해줌
- XGBoost – An optimized version of GBM enabling
- Cache awareness and out of core computing : 하드웨어 적인 부분
- XGBoost는 근사 값을 찾아 나가는 방법이기 때문에 약간의 정확도 손실이 존재함
- 하지만, 많은 양의 Data를 빠르게 처리할 수 있기 때문에 Big Data의 경우 매우 유용함
- XGBoost Split Finding Algorithm : Approximate Algorithm
- K번째 Feature의 값을 오름 차순으로 정렬했을 때 (왼쪽: Min, 오른쪽: Max)
- Buckets을 정하여 Dataset을 나누어 줌 (예시는 10개 Buckets)
- 각각의 Bucket 내에서 Split Point를 찾고 최종적으로 10개 Bucket 중 IG가 가장 높은 Point를 Best Split Point로 지정함
- 원래 39회 split-> 3 X 10회 split(병렬처리 가능)
- Per Tree: local vs global -> 정확도 땜에 local 주로 씀
- XGBoost : Sparsity-Aware Split Finding
- Effient handing of missing data
- 현업, 현실 Data는 많은 Missing data가 가 존재하게 됨
- Missing Data가 아니더라도 0 (Zero) 값이 많이 나타남
- Category Feature to One-hot encoding 일 때도 0 값이 많이 나타나게 됨
- Solution : 학습할 때 Default direction을 정의함
- 새로운 Missing이나 Zero Data가 들어 왔을 때 학습 시 정의한 Default direction으로 보내버림
-> left direction으로 보내버리니까 좀 더 분류가 잘됨!
- 새로운 Missing이나 Zero Data가 들어 왔을 때 학습 시 정의한 Default direction으로 보내버림
- XGBoost: 왜 열 단위 저장?
- 트리 학습과 스플릿 포인트(Split Point):
- XGBoost는 결정 트리를 구축할 때 각 트리 노드에서 최적의 분할 지점(스플릿 포인트)을 찾습니다.
- 이 분할 지점은 데이터의 특정 피처(feature) 값에 따라 결정됩니다.
- 피처 값의 정렬(Sorting):
- 스플릿 포인트를 찾기 위해, 각 피처의 값을 정렬해야 합니다.
- 데이터가 크면 클수록, 이 정렬 과정은 매우 시간이 많이 소요됩니다.
- 데이터 저장 방식(Column-wise Storage):
- XGBoost는 데이터를 Row-wise(행 단위)가 아닌 Column-wise(열 단위)로 저장합니다.
- 이렇게 하면, 각 피처별로 데이터를 빠르게 접근하고 처리할 수 있습니다.
- 압축된 열 포맷(Compressed Column, CSC Format):
- 데이터는 압축된 열 포맷(Compressed Sparse Column, CSC)으로 저장됩니다.
- 이 포맷은 메모리 사용을 최적화하고, 필요한 피처 데이터에 빠르게 접근할 수 있게 해줍니다.
- 인덱스 사용(Indexing):
- 데이터를 처음에 정렬할 때, 각 데이터 포인트의 원래 위치를 기록하는 인덱스를 생성합니다.
- 이 인덱스를 사용해 데이터의 원래 순서를 추적할 수 있습니다.
- 한 번의 정렬(One Time Sorting):
- 데이터를 처음에 한 번 정렬하고 나면, 이후에는 정렬할 필요가 없습니다.
- 이는 반복적인 정렬 과정을 제거함으로써 시간을 크게 절약합니다.
- 트리 학습과 스플릿 포인트(Split Point):
- 실습: 10. XG Boost Code
댓글남기기