[Machine Learning] Gradient Boosting Machine (GBM)
저번 포스팅에서는 AdaBoost에 대해서 알아보았고 이번에는 GBM에 대해서 알아보겠습니다. AdaBoost에서는 앞 단계의 모델이 잘 맞추지 못하는 데이터가 다음단계 모델 training에 선택될 확률을 높이는 방향이었다면 GBM은 loss function의 Gradient에 영향을 줍니다.GBM은 overfitting 방지를 위해서 1) 학습 데이터의 일부분만 비복원추출 방식으로 subsampling해서 사용합니다. 2) 다음 모델을 결합할 때 작은 가중치를 사용합니다.
1. GBM의 알고리즘
- 초기 모델 생성:
\[ F_0(x) = \arg \min_{\gamma} \sum_{i=1}^{n} L(y_i, \gamma) \] 여기서 \( L(y, \hat{y}) \)는 손실 함수입니다. - 잔차 (Residual) 계산:
\[ r_i^{(m)} = -\frac{\partial L(y_i, F_{m-1}(x_i))}{\partial F_{m-1}(x_i)} \] - 새로운 모델 학습:
\[ h_m(x) = \arg \min_{h} \sum_{i=1}^{n} \left( r_i^{(m)} - h(x_i) \right)^2 \] - 모델 업데이트:
\[ F_m(x) = F_{m-1}(x) + \alpha h_m(x) \] 여기서 \( \alpha \)는 학습률 (learning rate)입니다. - 반복: 위 과정을 여러 번 반복하여 모델을 점진적으로 개선합니다.
그림으로 살펴보면 좀 더 직관적 이해가 빠를 수 있습니다.
2. Feature Importance
GBM에서 Feature Importance는 수식으로 아래와 같은 기호로 나타내는데요,
\[ \text{Influence}_j(T): \text{ importance of the variable } j \text{ in a single tree } T. \]
terminal node가 \( L \)개 있다고하면 \( L - 1 \)개의 split이 있을겁니다(보통은 stump tree를 사용하니까 L=2). 그러면 이 녀석은 이렇게 정의할 수 있습니다.
\[ \text{Influence}_j(T) = \sum_{i=1}^{L-1} \left( \text{IG}_i \times \mathbf{1}(S_i = j) \right) \]
- \(\text{IG}_i\): \(i\)번째 split에서의 Information gain
- \(\mathbf{1}(S_i = j)\): \(i\)번째 split에서 변수 \( j \)를 사용했으면 1, 아니면 0
따라서, Gradient Boosting의 Feature Importance
\[ \text{Influence}_j = \frac{1}{M} \sum_{k=1}^{M} \text{Influence}_j(T_k) \] 여기서 \( M \)은 전체 트리의 개수입니다.