그래디언트 부스팅 머신(Gradient Boosting Machine, GBM)
여러 개의 약한 학습기(weak learner)를 순차적으로 학습시키고, 그 예측 결과를 결합하여 강한 학습기(strong learner)를 만드는 앙상블 학습 기법 중 하나
이전 모델이 잘못 예측한 데이터 포인트에 가중치를 부여하여, 다음 모델이 이를 더 잘 학습하도록 함 (각 단계에서 잔여 오차를 줄이도록 설계되어 있음)
GBM은 과적합을 방지하면서도 높은 예측 성능을 제공하는 강력한 알고리즘
다양한 하이퍼파라미터 튜닝을 통해 성능 최적화 가능
GBM의 구조
- 여러 개의 결정 트리(Desicion Tree)로 구성됨
- 각 결정 트리는 이전 트리의 예측 오류를 보완하는 방식으로 학습
- 최종 예측 값은 개별 트리의 예측을 가중합하여 계산
GBM의 학습 원리
- 초기 모델 학습: 첫 번째 결정 트리를 학습하여 초기 모델 생성
- 잔여 오차 계산: 초기 모델의 예측 결과와 실제 값의 차이를 계산하여 잔여 오차(residual error)를 구함
- 잔여 오차 학습: 잔여 오차를 예측하는 새로운 결정 트리 학습
- 모델 업데이트: 새로운 결정 트리를 기존 모델에 추가하여 모델 업데이트
- 반복 학습: 잔여 오차가 충분히 작아질 때까지 2 ~ 4 단계 반복
GBM 실습
유방암 데이터셋을 활용한 GBM 모델 구현
데이터 로드 및 전처리
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)
모델 구현 및 평가
Scikit-learn의 GradientBoostingClassifier
를 사용하여 GBM을 구현하고 평가
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score
# GBM 모델 생성
gbm_model = GradientBoostingClassifier(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)
# 평가
accuracy_gbm = accuracy_score(y_test, y_pred_gbm)
print(f'GBM 모델의 정확도: {accuracy_gbm:.4f}')
"""
GBM 모델의 정확도: 0.9561
"""
GBM 모델의 하이퍼파라미터 조정
GBM의 성능을 최적화하기 위해 주요 하이퍼파라미터를 조정
n_estimators
: 부스팅 단계를 수행할 트리의 개수 (기본값: 100)learning_rate
: 각 트리가 오류를 수정하는 정도를 조절하는 학습률 (기본값: 0.1)max_depth
: 개별 결정 트리의 최대 깊이 (기본값: 3)subsample
: 각 트리 학습 시 사용할 샘플의 비율 (기본값: 1.0, 전체 데이터 사용)
GridSearchCV를 사용하여 최적의 하이퍼파라미터를 찾아봄
from sklearn.model_selection import GridSearchCV
param_grid = {
'n_estimators': [100, 200],
'learning_rate': [0.01, 0.1],
'max_depth': [3, 5]
}
gbm_grid = GridSearchCV(GradientBoostingClassifier(random_state=42), param_grid, cv=5, scoring='accuracy')
gbm_grid.fit(X_train_scaled, y_train)
print(f'최적 하이퍼파라미터: {gbm_grid.best_params_}')
print(f'최고 검증 정확도: {gbm_grid.best_score_:.4f}')
"""
최적 하이퍼파라미터: {'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 200}
최고 검증 정확도: 0.9648
"""
'⊢MachineLearning' 카테고리의 다른 글
앙상블 학습 - XGBoost(eXtreme Gradient Boosting) (2) | 2025.03.18 |
---|---|
앙상블 학습 : 랜덤 포레스트(Random Forest) (0) | 2025.03.18 |
앙상블 학습 : 배깅(Bagging)과 부스팅(Boosting) (0) | 2025.03.17 |
비지도학습 : 차원축소 - LDA(Linear Discriminant Analysis) (0) | 2025.03.17 |
비지도학습 : 차원축소 - t-SNE(t-Distributed Stochastic Neighbor Embedding) (2) | 2025.03.17 |