Table of Contents

728x90

Gradient Boosting Machine (GBM), XGBoost, LightGBM, CatBoost, NGBoost는 모두 Gradient Boosting 알고리즘에 기반한 앙상블 학습 방법입니다. 이들 알고리즘은 각각 고유한 최적화 및 특성을 가지고 있어 다양한 데이터와 문제 유형에 대해 탁월한 성능을 발휘합니다. 각 알고리즘의 원리와 특징을 자세히 설명하겠습니다.

1. Gradient Boosting Machine (GBM)

원리

GBM은 여러 개의 약한 학습기(주로 결정 트리)를 순차적으로 학습시켜 강한 학습기를 만드는 방법입니다. 각 단계에서 새로운 약한 학습기는 이전 모델의 잔차(residual)를 예측하여 모델의 성능을 향상시킵니다. 모델의 예측은 모든 약한 학습기의 예측을 합산하여 이루어집니다.

알고리즘 단계

  1. 초기 모델 ( f_0(x) )을 설정합니다. 일반적으로 초기값은 훈련 데이터의 평균값입니다.
  2. 각 반복 ( m )에서:
    • 현재 모델 ( f_{m-1}(x) )에 대한 잔차 ( r_i = y_i - f_{m-1}(x_i) )를 계산합니다.
    • 잔차 ( r_i )를 예측하기 위해 새로운 학습기 ( h_m(x) )를 학습시킵니다.
    • 학습기 ( h_m(x) )의 예측 결과를 사용하여 모델을 업데이트합니다:
      [
      f_m(x) = f_{m-1}(x) + \eta h_m(x)
      ]
      여기서 ( \eta )는 학습률입니다.
  3. 최종 모델은 모든 학습기의 합으로 구성됩니다.

장점

  • 높은 예측 정확도
  • 유연성 (회귀, 분류 모두 가능)

단점

  • 학습 시간이 오래 걸림
  • 많은 메모리 사용

2. XGBoost (Extreme Gradient Boosting)

원리

XGBoost는 GBM의 확장 버전으로, 효율성 및 성능 향상을 위해 여러 가지 추가 기능과 최적화를 포함하고 있습니다. 이는 병렬 처리를 사용하여 학습 속도를 높이고, 정규화를 통해 과적합을 방지합니다.

주요 특징

  • 병렬 처리: 여러 트리를 병렬로 학습하여 속도를 높임
  • 정규화: L1, L2 정규화를 통해 과적합 방지
  • 트리 구조 최적화: 최적의 트리 구조를 찾기 위한 다양한 알고리즘 사용
  • 조기 종료: 검증 데이터의 성능 향상을 기반으로 학습을 일찍 종료할 수 있음

예시

import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

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

# XGBoost 모델 생성 및 학습
model = xgb.XGBClassifier(objective='binary:logistic', n_estimators=100, learning_rate=0.1, random_state=42)
model.fit(X_train, y_train)

# 예측 및 성능 평가
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'XGBoost Test Accuracy: {accuracy:.4f}')

3. LightGBM (Light Gradient Boosting Machine)

원리

LightGBM은 GBM과 유사하지만, 학습 속도와 메모리 효율성을 크게 향상시키기 위해 몇 가지 핵심 최적화를 포함하고 있습니다. LightGBM은 특히 대규모 데이터셋에서 효율적으로 작동합니다.

주요 특징

  • 리프 중심 트리 분할: 레벨 중심이 아닌 리프 중심으로 트리를 분할하여 더 깊은 트리를 생성함
  • GOSS (Gradient-based One-Side Sampling): 중요도가 높은 샘플을 우선적으로 사용하여 계산 효율성 향상
  • EFB (Exclusive Feature Bundling): 상호 배타적인 특징을 하나의 특징으로 결합하여 차원 축소

예시

import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

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

# LightGBM 데이터셋 생성
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)

# LightGBM 모델 설정
params = {
    'objective': 'binary',
    'metric': 'binary_logloss',
    'boosting_type': 'gbdt',
    'learning_rate': 0.1,
    'num_leaves': 31,
    'random_state': 42
}

# 모델 학습
model = lgb.train(params, train_data, valid_sets=[test_data], num_boost_round=100, early_stopping_rounds=10)

# 예측 및 성능 평가
y_pred = model.predict(X_test, num_iteration=model.best_iteration)
y_pred_binary = [1 if x > 0.5 else 0 for x in y_pred]
accuracy = accuracy_score(y_test, y_pred_binary)
print(f'LightGBM Test Accuracy: {accuracy:.4f}')

4. CatBoost (Categorical Boosting)

원리

CatBoost는 특히 범주형 데이터를 다루는 데 최적화된 Gradient Boosting 알고리즘입니다. CatBoost는 데이터 전처리 없이 범주형 데이터를 직접 처리할 수 있으며, 성능과 사용 편의성을 제공합니다.

주요 특징

  • 범주형 데이터 처리: 범주형 데이터를 효율적으로 처리하는 알고리즘 내장
  • 기본 하이퍼파라미터: 기본값으로도 좋은 성능을 제공하는 하이퍼파라미터 설정
  • GPU 지원: GPU를 사용하여 학습 속도 향상

예시

import catboost as cb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

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

# CatBoost 모델 생성 및 학습
model = cb.CatBoostClassifier(iterations=100, learning_rate=0.1, depth=6, random_seed=42, verbose=0)
model.fit(X_train, y_train)

# 예측 및 성능 평가
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'CatBoost Test Accuracy: {accuracy:.4f}')

5. NGBoost (Natural Gradient Boosting)

원리

NGBoost는 예측 불확실성을 추정할 수 있는 Gradient Boosting 알고리즘입니다. NGBoost는 예측뿐만 아니라 예측의 불확실성(분산)도 함께 추정합니다. 이는 의료, 금융 등 불확실성을 고려해야 하는 분야에서 유용합니다.

주요 특징

  • 불확실성 추정: 예측의 불확실성을 함께 추정
  • 유연성: 다양한 확률 분포를 모델링 가능
  • 자연 그라디언트: 파라미터 공간에서 자연 그라디언트를 사용하여 안정성과 성능 향상

예시

import ngboost
from ngboost import NGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

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

# NGBoost 모델 생성 및 학습
model = NGBClassifier(n_estimators=100, learning_rate=0.1, random_state=42)
model.fit(X_train, y_train)

# 예측 및 성능 평가
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'NGBoost Test Accuracy: {accuracy:.4f}')

요약

  • GBM: 기본적인 Gradient Boosting 알고리즘으로, 높은 예측 성능을 보이나 학습 시간이 길고 메모리 사용량이 큽니다.
  • XGBoost: GBM의 확장 버전으로, 병렬 처리와 정규화 등을 통해 성능과 효율성을 크게 향상시킵니다.
  • LightGBM: 대규모 데이터셋에 최적화된 Gradient Boosting 알고리즘으로, 리프 중심 트리 분할과 샘플링 최적화를 통해 매우 빠르고 메모리 효율적입니다.
  • CatBoost: 범주형 데이터를 효율적으로 처리할 수 있으며, 데이터 전처리가 거의 필요 없는 알고리즘입니다.
  • NGBoost: 예측 불확실성을 추정할 수 있는 Gradient Boosting 알고리즘으로, 불확실성을 고려해야 하는 분야에 유용합니다.

각 알고리즘은 다양한 데이터셋과 문제 유형에 따라 선택할 수 있으며, 주어진 문제의 특성에 따라 적절한 알고리즘을 선택하는 것이 중요합니다.

'ML' 카테고리의 다른 글

Clustering 클러스터링  (1) 2024.05.31
Model black box, XAI: LIME, SHAP  (0) 2024.05.31
Adaboost(Adaptive Boosting)  (0) 2024.05.30
Model Explanation 모델설명  (0) 2024.05.30
Validation set(검증 세트)  (0) 2024.05.30