Table of Contents
Ensemble > Boosting: Gradient Boosting Machine(GBM), XGBoost, LightGBM, CatBoost, NGBoost
꼬꼬마코더 2024. 5. 30. 15:48Gradient Boosting Machine (GBM), XGBoost, LightGBM, CatBoost, NGBoost는 모두 Gradient Boosting 알고리즘에 기반한 앙상블 학습 방법입니다. 이들 알고리즘은 각각 고유한 최적화 및 특성을 가지고 있어 다양한 데이터와 문제 유형에 대해 탁월한 성능을 발휘합니다. 각 알고리즘의 원리와 특징을 자세히 설명하겠습니다.
1. Gradient Boosting Machine (GBM)
원리
GBM은 여러 개의 약한 학습기(주로 결정 트리)를 순차적으로 학습시켜 강한 학습기를 만드는 방법입니다. 각 단계에서 새로운 약한 학습기는 이전 모델의 잔차(residual)를 예측하여 모델의 성능을 향상시킵니다. 모델의 예측은 모든 약한 학습기의 예측을 합산하여 이루어집니다.
알고리즘 단계
- 초기 모델 ( f_0(x) )을 설정합니다. 일반적으로 초기값은 훈련 데이터의 평균값입니다.
- 각 반복 ( 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 )는 학습률입니다.
- 최종 모델은 모든 학습기의 합으로 구성됩니다.
장점
- 높은 예측 정확도
- 유연성 (회귀, 분류 모두 가능)
단점
- 학습 시간이 오래 걸림
- 많은 메모리 사용
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 |
- Total
- Today
- Yesterday
- nlp
- Github
- t5
- recursion #재귀 #자료구조 # 알고리즘
- cnn
- git
- PEFT
- Python
- #패스트캠퍼스 #패스트캠퍼스AI부트캠프 #업스테이지패스트캠퍼스 #UpstageAILab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- 티스토리챌린지
- classification
- Hugging Face
- English
- Array
- 파이썬
- Numpy
- #패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #무료교육 #국비지원 #국비지원취업 #데이터분석취업 등
- 해시
- LIST
- 리스트
- RAG
- #패스트캠퍼스 #패스트캠퍼스ai부트캠프 #업스테이지패스트캠퍼스 #upstageailab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- LLM
- 코딩테스트
- 손실함수
- clustering
- speaking
- Transformer
- 오블완
- Lora
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |