1 분 소요

  • 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) image
    • 각각의 Bucket 내에서 Split Point를 찾고 최종적으로 10개 Bucket 중 IG가 가장 높은 Point를 Best Split Point로 지정함 image
    • 원래 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으로 보내버림 image -> left direction으로 보내버리니까 좀 더 분류가 잘됨!
  • XGBoost: 왜 열 단위 저장?
    1. 트리 학습과 스플릿 포인트(Split Point):
      • XGBoost는 결정 트리를 구축할 때 각 트리 노드에서 최적의 분할 지점(스플릿 포인트)을 찾습니다.
      • 이 분할 지점은 데이터의 특정 피처(feature) 값에 따라 결정됩니다.
    2. 피처 값의 정렬(Sorting):
      • 스플릿 포인트를 찾기 위해, 각 피처의 값을 정렬해야 합니다.
      • 데이터가 크면 클수록, 이 정렬 과정은 매우 시간이 많이 소요됩니다.
    3. 데이터 저장 방식(Column-wise Storage):
      • XGBoost는 데이터를 Row-wise(행 단위)가 아닌 Column-wise(열 단위)로 저장합니다.
      • 이렇게 하면, 각 피처별로 데이터를 빠르게 접근하고 처리할 수 있습니다.
    4. 압축된 열 포맷(Compressed Column, CSC Format):
      • 데이터는 압축된 열 포맷(Compressed Sparse Column, CSC)으로 저장됩니다.
      • 이 포맷은 메모리 사용을 최적화하고, 필요한 피처 데이터에 빠르게 접근할 수 있게 해줍니다.
    5. 인덱스 사용(Indexing):
      • 데이터를 처음에 정렬할 때, 각 데이터 포인트의 원래 위치를 기록하는 인덱스를 생성합니다.
      • 이 인덱스를 사용해 데이터의 원래 순서를 추적할 수 있습니다.
    6. 한 번의 정렬(One Time Sorting):
      • 데이터를 처음에 한 번 정렬하고 나면, 이후에는 정렬할 필요가 없습니다.
      • 이는 반복적인 정렬 과정을 제거함으로써 시간을 크게 절약합니다.
  • 실습: 10. XG Boost Code

카테고리:

업데이트:

댓글남기기