수업 설계 & 교수법/트리 모형
XGBoost란?
EduDataMaestro
2024. 2. 15. 22:30
728x90
XGBoost는 "eXtreme Gradient Boosting"의 약자로, 결정 트리 기반의 학습 시스템에서 그래디언트 부스팅(Gradient Boosting) 기술을 활용하여 고성능을 내도록 설계된 머신러닝 알고리즘입니다. 그래디언트 부스팅은 여러 개의 약한 학습기(주로 결정 트리)를 순차적으로 학습시키면서, 이전 학습기가 잘못 예측한 사례에 더 큰 가중치를 두어 오류를 보정해 나가는 앙상블 학습 방법입니다.
XGBoost는 그래디언트 부스팅의 일종으로, 각 단계에서 모델은 이전 모든 단계의 합을 기반으로 손실 함수(loss function)의 그래디언트를 계산합니다. 이 그래디언트 정보를 사용하여 모델의 오류를 줄이기 위해 다음 모델(결정 트리)이 추가됩니다. 이 과정은 반복적으로 수행되며, 각 반복마다 모델은 점점 더 정확해집니다.
XGBoost의 주요 특징
- 성능 및 속도: XGBoost는 정밀도가 높고, 실행 속도가 빠르며, 대용량 데이터 처리에 효율적입니다. 병렬 처리를 지원하여 학습 시간을 크게 단축시킵니다.
- 과적합 방지 기능: 규제화 기능(L1, L2 규제)이 내장되어 있어 복잡한 모델이 과적합되는 것을 방지합니다.
- 유연성: 사용자 정의 최적화 목표와 평가 기준을 설정할 수 있어 다양한 문제에 적용할 수 있습니다.
- 결측치 자동 처리: 내부적으로 결측치를 처리할 수 있는 방법을 제공하여 별도의 전처리 없이도 모델 학습이 가능합니다.
- 트리 가지치기: XGBoost는 깊이 우선 성장(depth-first growth) 방식을 사용하며, 손실 함수를 기준으로 트리의 성장이 더 이상 이득이 없을 때 가지치기를 진행합니다.
XGBoost 알고리즘의 작동 원리를 이해하기 위한 간략한 슈도코드를 제공하겠습니다. 이 슈도코드는 XGBoost의 주요 단계와 알고리즘의 핵심적인 부분을 단순화하여 설명하며, 실제 구현 시에는 더 많은 최적화와 세부 사항이 포함됩니다.
XGBoost 슈도코드
입력: 학습 데이터셋 D = {(x_i, y_i)}, i=1...N, 여기서 x_i는 특성 벡터, y_i는 레이블
최대 깊이 max_depth, 학습률 eta, 트리의 수 num_rounds
1. 모델 F 초기화: F_0(x) = 0
2. 각 반복 round = 1...num_rounds에 대해:
a. 데이터셋에 대한 그래디언트와 헤시안 계산:
g_i = ∂L(y_i, F(x_i)) / ∂F(x_i), h_i = ∂^2 L(y_i, F(x_i)) / ∂F(x_i)^2
여기서 L은 손실 함수
b. 트리 구축:
- 루트 노드에서 시작하여, 최대 깊이 max_depth에 도달할 때까지 반복
- 각 노드에서, 모든 가능한 분할에 대해 목적 함수의 이득을 계산
- 최대 이득을 제공하는 특성과 분할 지점을 선택하여 노드를 분할
- 분할 후, 각 자식 노드에 대해 a와 b 단계 반복
c. 가중치 업데이트:
- 각 리프 노드에 대해 최적의 가중치 w_j* 계산:
w_j* = - Σ(g_i) / (Σ(h_i) + λ), j는 리프 노드 인덱스
- F(x) 업데이트: F_t(x) = F_{t-1}(x) + eta * sum(w_j* * I(x in R_j))
여기서 R_j는 리프 노드 j에 도달하는 모든 x의 집합, I는 지시 함수
3. 최종 모델 F(x) = F_num_rounds(x)
- 손실 함수(L): 모델의 예측값과 실제 레이블 간의 차이를 측정합니다. XGBoost는 회귀, 분류 등 다양한 손실 함수를 지원합니다.
- 그래디언트(g)와 헤시안(h): 모델을 업데이트하는 방향과 크기를 결정합니다. 손실 함수의 첫 번째와 두 번째 도함수입니다.
- 목적 함수의 이득: 분할 전후의 손실 감소를 측정합니다. 이를 최대화하는 분할을 선택합니다.
- 학습률(eta): 각 트리의 기여도를 조절하여 모델의 업데이트 속도를 조절합니다. 너무 높으면 학습이 불안정해지고, 너무 낮으면 학습이 느려집니다.
- 규제화(λ): 과적합을 방지하기 위해 리프 노드의 가중치에 패널티를 추가합니다.