티스토리 뷰
https://www.youtube.com/watch?v=VHky3d_qZ_E&t=212s
[해당 영상으로 공부하였습니다.]
XGBoost > GBM의 성능, 스케일, 속도를 최적화하기 위해서 극한으로 빠르게. > 단, 약간의 성능 저하가 발생할 수 있음.(근사기법때문에 ,approximation) 데이터를 더 많이 사용할 수 있고, 병렬처리 가능하기때문에 근사기법의 단점을 극복할 수 있다.
XGBoost는 GBM이지만, 보다 빠르게 해를 찾아감, 스케일링?(무슨뜻?)
1. Split finding algorithm
기본 tree
- best split를 찾기위해 모든 구역 전수조사 ( 항상 최적의 구간을 찾을 수 있음. Greedy)
- 메모리에 데이터 자체가 다 들어가지 않을 정도로 많은 데이터라면 수행 불가능.
- 모든 구역을 전수조사 해야하기때문에 분산환경(병렬처리)가 불가능함.
XGBoost 단계
- 전체 데이터의 영역을 분할(bucket이라 표현),( percentiles로) / epsilon이 해당 역할 > hyper parameter
- 영역 분할은, global, local로 가능함.
- Bucket별 split point를 찾음 ( 밑 사진과 같이 Bucket를 만들고, 각 Bucket별 best split point를 진행하여 가장 최적의 구간 찾음)
- 즉, Bucket를 나눠서 best split point를 찾기때문에, 기존 split point를 찾는 것보다 더 적은 연산이 필요 > approximate
- Bucket으로 나누었기 때문에, 병렬처리 가능. > 속도 향상
- Bucket의 2가지 종류 : Global variant(per Tree) vs Local variant(per Split)
- Global variant(per Tree) - 처음 만들어 놓은 Bucket 기준을 지속적으로 사용
- Local variant(per Split) - Split시 Bucket의 갯수가 자식노드에서도 지속적으로 유지됨
- 주의점 : global의 eps은 작게, local의 eps은 크게 잡아도 된다.
- 1/ epsilon 개만큼 Bucket 생성됨
결측치를 효율적으로 처리하자. (Sparsity-Aware Split Finding)
- 실제 데이터의 경우 굉장히 결측치가 많음.
- 또, missing이 아닌 0값이 과도하게 나타나는 경우 ( e.g. one-hot encoding )
- missing value to right vs missing value to left 둘 중 더 좋은 구간을 찾아 missing data가 들어올 시 그쪽으로 보냄
그랬을경우 split point를 덜 구할 수 있기때문에 빠름??? ( 개인적 생각임)
트리에 대한 병렬화
- 데이터가 많으면 많을수록 속도에 영향을 주는 것은, 각각의 변수에 대해 sorting을 진행하는 것임.
- Compressed column(CSC) format > row wise 하게 저장하는게 아닌, column wise하게 저장 ( 즉, column별 값을 하나의 list로 저장하겠다) + sorting을 해놓음 > 칼럼별 index가 뒤섞이긴 함
- 이렇게 한번만 해놓으면, 중간중간 다시 sorting할 필요 없음.
Hardware (Cache)
- 빠른 속도를 위해 Cache 용량 매니지먼트를 잘 하자 > 그럼 속도가 빠르겠지?
- 알고리즘을 수행하는 것보다, 데이터 입출력에 시간이 더 많이 든다. > 그 부분의 처리를 적절히 잘 해주자. ( out-of-core computing, Block Compression, Block Sharding 등 기법을 사용한다고 한다.. )
최종 정리
approximate 기법
1. Bucket생성하여 해당 Bucket에 있는 데이터만 사용하여 best split구간 탐색
속도 향상 기법
1. Bucket으로 인한 병렬처리
2. 모든 column값을 sorting
3. 하드웨어 기법
기울기라고 하는 건 뭔데? > GBM에서는 결국 잔차다.
꼭 조정해야 하는 파라미터
max_depth
colsample_bytree : tree당 모두 같은 feature를 사용 ( 0~ 1 비율)
colsample_bylevel : level별로 feature sampling ( 0 ~ 1 비율 )
colsample_bynode : node마다 feature sampling ( sklearn decision tree는 이걸 사용 ) ( 0 ~ 1 비율)
> 3개 모두 비율로 사용할 수 있음. 모든 파라미터 동시 사용 가능
reg_lambda : 0.2~200 오버 피팅을 덜 하고싶을수록 높은 숫자
'머신러닝' 카테고리의 다른 글
Confusion Matrix & ROC Curve (0) | 2023.05.24 |
---|---|
[ML] iForest / Extended iForest 정리 (0) | 2023.04.29 |
[ML] LGBM 기본 정리 (0) | 2023.04.09 |
[ML] MCD ( Minimum Covariance Determinent ) - 2. MCD모델 원리 (0) | 2023.03.31 |
[ML] MCD ( Minimum Covariance Determinent ) - 1. 마할라노비스 거리 (Mahalanobis distances) (0) | 2023.03.26 |
- Total
- Today
- Yesterday
- GIT
- CNN
- 오류
- YOLO
- 도커
- 깃
- 초보자
- 티스토리챌린지
- c3k2
- yolov11
- docker
- 욜로
- 뜯어보기
- github
- java
- DeepLearning
- 알고리즘
- 자바
- 어탠션
- python
- YOLOv8
- GNN
- 딥러닝
- 이미지
- Tree
- 디텍션
- 오블완
- V11
- 백준
- 정리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |