AI/ML

[ML] 앙상블 학습 - 그래디언트 부스팅 머신 (GBM)

죵욜이 2024. 12. 29. 03:51

GBM 이란?

GBM 부스팅(Boosting) 기법을 사용하는 앙상블 학습 알고리즘으로, 약한 학습기(weak learner)인 결정 트리(Decision Tree)를 반복적으로 학습하여 강한 학습기(strong learner)를 만들어 가는 방식입니다. 그래디언트 부스팅은 이전 모델이 잘못 예측한 부분을 다음 모델이 개선하도록 훈련하여, 모델의 성능을 점진적으로 향상시킵니다.


그래디언트 부스팅의 기본 원리:

  1. 약한 학습기 결합:
    • 그래디언트 부스팅은 일반적으로 결정 트리와 같은 약한 학습기를 사용합니다. 이 모델은 각 학습 단계에서 잘못 예측된 부분을 보완하며 점차 성능을 향상시킵니다.
  2. 순차적 학습:
    • 그래디언트 부스팅은 이전 모델의 예측 오류(residual)를 학습하는 방식으로 작동합니다. 즉, 첫 번째 모델이 예측한 값과 실제 값의 차이를 계산하고, 이를 보정하는 방식으로 두 번째 모델을 훈련시킵니다. 이런 방식으로 모델을 여러 번 반복하여 학습합니다.
  3. 경사 하강법(Gradient Descent):
    • "그래디언트"라는 이름은 경사 하강법을 사용하여 오류를 최소화하는 과정을 의미합니다. 각 단계에서 모델은 이전 단계의 잔여 오류(residual)에 대해 경사를 계산하여, 그 방향으로 예측을 조정합니다. 즉, 예측 오류를 줄여 나가며 학습합니다.

그래디언트 부스팅의 과정:

  1. 초기 모델 훈련:
    • 먼저, 첫 번째 모델을 훈련시킵니다. 일반적으로 초기 예측값은 단순한 값(예: 평균값 또는 0)으로 설정됩니다.
  2. 잔여 오차 계산:
    • 첫 번째 모델이 만든 예측과 실제 값 사이의 차이(잔여 오차)를 계산합니다.
  3. 두 번째 모델 훈련:
    • 두 번째 모델은 첫 번째 모델이 만든 잔여 오차를 학습합니다. 즉, 첫 번째 모델의 예측 오류를 보완하는 방향으로 훈련됩니다.
  4. 모델 업데이트:
    • 두 번째 모델이 학습한 내용을 기존 모델에 추가합니다. 이 과정을 반복하여, 각 단계에서 예측을 개선해 나갑니다.
  5. 최종 예측:
    • 여러 모델이 결합된 후, 각 모델의 예측을 합산하여 최종 예측값을 도출합니다. 회귀 문제에서는 보통 모델의 예측값을 더하고, 분류 문제에서는 다수결을 이용해 예측합니다.

그래디언트 부스팅의 주요 특징:

  1. 점진적인 학습:
    • 그래디언트 부스팅은 순차적인 모델 학습 방식을 사용하여, 모델이 점진적으로 성능을 향상시킵니다.
  2. 오류 보정:
    • 이전 모델의 예측 오류를 보정하면서 모델을 학습시키기 때문에, 전체 모델의 성능이 개선됩니다.
  3. 유연성:
    • 다양한 손실 함수(loss function)를 사용할 수 있어, 회귀, 분류, 순위 예측 등 다양한 문제를 해결할 수 있습니다.
  4. 강력한 성능:
    • 그래디언트 부스팅은 개별 모델이 약할지라도, 여러 개의 모델을 결합하여 뛰어난 예측 성능을 보여줍니다.

장점:

  • 높은 예측 성능: 그래디언트 부스팅은 여러 모델을 결합해 성능을 향상시키므로 많은 문제에서 높은 정확도를 보입니다.
  • 과적합 제어: 적절한 하이퍼파라미터 조정(예: 트리의 깊이, 학습률 등)을 통해 과적합을 방지할 수 있습니다.
  • 다양한 문제 해결 가능: 회귀, 분류, 순위 예측 등 다양한 문제에 적용 가능합니다.

단점:

  • 훈련 시간: 각 모델을 순차적으로 훈련시키기 때문에, 학습 시간이 길어질 수 있습니다.
  • 모델 해석 어려움: 복잡한 모델이기 때문에 개별 예측 결과를 해석하기 어려울 수 있습니다.
  • 하이퍼파라미터 튜닝: 많은 하이퍼파라미터가 있어, 최적의 성능을 내기 위해서는 튜닝이 필요합니다.

예시

- 데이터 로드

from sklearn.ensemble import BaggingRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 유방암 데이터 로드
cancer_data = load_breast_cancer()
X, y = cancer_data.data, cancer_data.target

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 데이터 스케일링
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

 

- GBM 모델 구현 및 평가

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error

# GBM 모델 생성
gbm_model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)

# 모델 학습
gbm_model.fit(X_train_scaled, y_train)

# 예측
y_pred_gbm = gbm_model.predict(X_test_scaled)

# 평가
mse_gbm = mean_squared_error(y_test, y_pred_gbm)
print(f'GBM 모델의 MSE: {mse_gbm}')