티스토리 뷰

머신러닝

[ML] XGBoost 기본 정리

Sims. 2023. 4. 9. 19:37

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 오버 피팅을 덜 하고싶을수록 높은 숫자

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함