본문 바로가기
ML

#6 앙상블 기법 XGBoost(Extreme Gradient Boosting)

by Kwonys 2023. 9. 22.
728x90
반응형

XGBoost (Extreme Gradient Boosting)

  • Gradient Boosting의 과적합 방지를 위한 기법이 추가된 지도학습 
  • Gradient Boosting의 병렬 학습이 지원되도록 구현한 라이브러리
  • GBM에서 발전하여 제한된 컴퓨팅 자원하에서 더 빠르게 효율적으로 많은 데이터를 활용
  • 경험적으로는 데이터가 1,000개 ~ 30,000 일때 사용, 데이터가 더 클 때는 LightGBM이 더 좋다고 생각

XGBoost 장점

  • 병렬처리를 통한 빠른 학습
  • 유연한 learning system
  • overfitting 방지를 위한 설계
  • 다양한 시나리오에 대한 확장성

 

XGBoost는 Gradient Boost이지만, 보다 빠르게 처리하고자하는데 그 목적이다.

 

목적을 위한 방법 두 가지

1. Split Finding Algorithm

  • 장점
    • 가능한 모든 분지점을 전부 탐색하기 때문에 항상 최적의 분기점(Best Spit)을 찾을 수 있음
  • 단점
    • 데이터가 메모리에 모두 저장되지 않을 경우 현실적으로 탐색이 불가능
    • 분산 컴퓨팅 환경에서 계산 불가능
  • 예시
    • 좌측부터 우측으로 오름차순으로 정렬되어 있다고 가정
    • 전체 데이터를 10 분할
    • 각 분할에 대해서 개별적으로 계산하여 Best Split을 찾음(병렬)

 

2. Sparsity-Aware Split Finding

  • 현실의 많은 데이터들은 입력 데이터의 밀도가 낮은 Sparse 한 경우가 빈번하게 발생함
    • 데이터의 결측치가 많거나 
    • 0의 값이 매우 높은 비중을 차지하고 있거나
    • 1-hot encoding과 같은 feature engineering이 수행되었거나
  • Solution : 분기의 기본 방향 Default direction을 설정
  • 예시

Sparsity-Aware Split Finding이 Basic algorithm보다 속도가 훨씬 빠르다

 

효율적인 컴퓨팅을 위한 시스템 디자인

  • 의사결정나무에서 가장 시간이 많이 소요되는 부분
    • 데이터를 각 변수 값으로 정렬하는 과정
  • XGBoost는 block이라 부르는 곳에 데이터를 저장
    • 각 블록의 데이터는 compressed column(CSC) format으로 저장되며, 각 칼럼은 해달 변수의 값을 정렬한 상태로 저장
    • 최초의 데이터 생성 시 1회 계산하여 저장한 뒤 이후 과정에서 계속 재사용

 

 

XGBoost 중요 파라미터

CART 관련 param

  • max_depth : 5~15
  • colsample_bynode : local randomization, 0.5 ~ 0.8
  • reg_lambda : regularization parameter, 0.5~ 5.0

Tree ensemble 관련 params

  • n_estimators : 50 ~ 2000
  • learning_rate : pseudo-residual parameter (n_estimators가 클수록 작음), 0.3 ~ 0.01 
  • tree_method : best split을 찾을 때 데이터를 사용하는 방법, 'exact' , 'gpu_hist' , 'approximate' -> 잘 안 씀
  • random_state
728x90
반응형