XGBoost (eXtreme Gradient Boosting)
그래디언트 부스팅(Gradient Boosting) 알고리즘을 기반으로 한 고성능 앙상블 학습 기법
빠른 학습 속도, 높은 예측 성능, 과적합 방지 기능 등을 제공
병렬 처리, 조기 종료(Early Stopping), L1 & L2 정규화 등의 기능을 지원
효율성, 유연성, 이식성을 목표로 설계됨
캐글(Kaggle) 등 머신러닝 경진대회에서 널리사용됨
동작 원리
- 초기 모델 학습
첫 번째 결정 트리를 학습하여 기본 모델을 생성 - 잔여 오차(Residual) 계산
초기 모델의 예측값과 실제값 간의 차이(오차)를 계산 - 잔여 오차를 예측하는 새로운 트리 학습
이전 모델이 학습하지 못한 부분(잔여 오차)을 보완하는 트리를 추가 - 모델 업데이트
기존 모델에 새롭게 학습된 트리를 추가하여 성능 개선 - 반복 수행
잔여 오차가 충분히 작아질 때까지 2 ~ 4 단계 반복
장점
- 고속 학습
병렬 처리 지원으로 학습 속도 개선
캐싱 최적화 및 Out-of-Core Computing을 통해 대용량 데이터 처리 가능 - 과적합 방지
조기 종료(Early Stopping) : 검증 데이터 성능이 향상되지 않으면 학습을 자동으로 중단
L1 및 L2 정규화 적용 : 모델 복잡도를 제어하여 과적합을 방지 - 유연한 모델링
회귀(Regression), 분류(Classification), 랭킹(Ranking) 문제에 적용 가능
다양한 손실 함수와 평가 지표 지원 (ex. RMSE, Log Loss, AUC 등)
XGBoost 실습
유방암 데이터셋을 이용하여 XGBoost 모델을 학습하고 평가
데이터 로드 및 전처리
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
# 데이터 로드
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)
# 데이터 스케일링 (XGBoost는 스케일링이 필수는 아니지만 성능 향상을 위해 적용)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
XGBoost 모델 학습 및 평가
# XGBoost 모델 생성
xgb_model = xgb.XGBRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
# 모델 학습
xgb_model.fit(X_train_scaled, y_train)
# 예측 수행
y_pred_xgb = xgb_model.predict(X_test_scaled)
# 모델 평가
mse_xgb = mean_squared_error(y_test, y_pred_xgb)
print(f'XGBoost 모델의 MSE: {mse_xgb:.4f}')
"""
XGBoost 모델의 MSE: 0.0342
"""
평가 지표
평균제곱오차(MSE, Mean Squared Error)
MSE 값이 낮을수록 모델의 예측 성능이 좋음을 의미
모델의 과적합 여부를 확인하기 위해 훈련 데이터와 테스트 데이터의 성능을 비교
모델 개선 방법
- 트리 개수(n_estimators) 조정
너무 크면 과적합 가능성 있음
조기 종료(early_stopping_rounds)를 활용하여 최적의 트리 개수 탐색 가능 - 학습률(learning_rate) 튜닝
학습률을 낮추면 과적합 방지 효과가 있으나, 학습 속도가 느려질 수 있음 - 트리 깊이(max_depth) 조절
깊이가 너무 깊으면 과적합 가능성 높아짐
적절한 값(max_depth=3~6 추천)을 찾아야 함 - 정규화 기법 활용
reg_alpha(L1 정규화), reg_lambda(L2 정규화)를 조정하여 모델 복잡도 제어
'⊢MachineLearning' 카테고리의 다른 글
앙상블 학습 - 그래디언트 부스팅 머신(Gradient Boosting Machine, GBM) (0) | 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 |