앙상블 학습(Ensemble Learning)
여러 개의 개별 학습 모델을 조합하여 단일 모델보다 더 높은 예측 성능을 얻는 기법
개별 모델의 예측을 평균 또는 다수결 방식으로 결합하여 일반화 성능을 향상
주요 기법 : 배깅(Bagging)과 부스팅(Boosting)
배깅(Bagging: Bootstrap Aggregating)
여러 개의 모델을 병렬로 학습하여 예측을 평균 또는 다수결로 결합하는 방식
원본 데이터셋에서 중복을 허용한 샘플링(부트스트래핑, Bootstrap)기법을 사용하여 다수의 학습 데이터를 생성
각 모델이 서로 다른 샘플을 학습하여 모델 간 상관성을 줄임
- 과적합 방지 : 다수의 모델을 결합함으로써 개별 모델의 과적합을 줄일 수 있음
- 안정성 향상 : 데이터 변동에 대한 민감도가 낮아짐
- 병렬 처리 가능 : 각 모델을 독립적으로 학습할 수 있어 병렬 연산이 가능
배깅의 대표적인 알고리즘
- 랜덤 포레스트(Random Forest) : 여러 개의 결정 트리를 배깅 기법으로 결합한 대표적인 모델
부스팅(Boosting)
여러 개의 약한 학습기(Weak Learner)를 순차적으로 학습하여 점진적으로 성능을 개선하는 방식
이전 모델이 잘못 예측한 데이터에 더 높은 가중치를 부여하여 다음 모델이 더 잘 학습하도록 유도
최종적으로 개별 모델을 조합하여 강력한 예측 모델 생성
- 높은 예측 성능 : 반복적인 오류 보정을 통해 성능이 지속적으로 향상
- 과적합 방지 : 모델 복잡도를 조절하여 일반화 성능 유지 가능
- 순차적 학습 : 이전 모델의 오류를 보완하는 방식으로 학습이 진행
부스팅의 대표적인 알고리즘
- AdaBoost(Adaptive Boosting)
- Gradient Boosting (GBM, XGBoost, LightGBM, CatBoost)
배깅과 부스팅 모델 구현 및 평가
데이터 준비 - 유방암 데이터셋
from sklearn.ensemble import BaggingRegressor, GradientBoostingRegressor
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
# 데이터 분할 (80% 학습, 20% 테스트)
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)
배깅 모델 구현 및 평가
# 배깅 모델 생성 (결정 트리를 기본 학습기로 사용)
bagging_model = BaggingRegressor(estimator=DecisionTreeRegressor(), n_estimators=100, random_state=42)
# 모델 학습
bagging_model.fit(X_train_scaled, y_train)
# 예측
y_pred_bagging = bagging_model.predict(X_test_scaled)
# 평가 (평균 제곱 오차, MSE)
mse_bagging = mean_squared_error(y_test, y_pred_bagging)
print(f'배깅 모델의 MSE: {mse_bagging:.4f}')
"""
배깅 모델의 MSE: 0.0320
"""
부스팅 모델 구현 및 평가
# 부스팅 모델 생성 (Gradient Boosting 사용)
boosting_model = GradientBoostingRegressor(n_estimators=100, random_state=42)
# 모델 학습
boosting_model.fit(X_train_scaled, y_train)
# 예측
y_pred_boosting = boosting_model.predict(X_test_scaled)
# 평가 (평균 제곱 오차, MSE)
mse_boosting = mean_squared_error(y_test, y_pred_boosting)
print(f'부스팅 모델의 MSE: {mse_boosting:.4f}')
"""
부스팅 모델의 MSE: 0.0313
"""
배깅 vs. 부스팅
기법 | 학습 방식 | 결합 방식 | 장점 | 단점 |
배깅(Bagging) | 병렬 학습 | 개별 모델의 예측을 평균 또는 다수결로 결합 | 과적합 방지, 안정성 향상, 병렬 처리 가능 | 최적의 성능을 내기 어려움 |
부스팅(Boosting) | 순차적 학습 | 이전 모델의 오류를 보완하며 학습 | 높은 예측 성능, 강력한 모델 성능 | 연산량이 많고 학습 시간이 오래 걸림, 과적합 위험 |
배깅은 여러 개의 모델을 독립적으로 학습하여 안정적인 성능과 과적합 방지 효과가 있음
부스팅은 이전 모델의 오류를 보완하는 방식으로 높은 예측 성능을 제공하지만 학습 시간이 길고 과적합 위험이 있음
→ 데이터 특성과 모델 성능 요구 사항에 따라 적절한 기법 선택
'⊢MachineLearning' 카테고리의 다른 글
앙상블 학습 - 그래디언트 부스팅 머신(Gradient Boosting Machine, GBM) (0) | 2025.03.18 |
---|---|
앙상블 학습 : 랜덤 포레스트(Random Forest) (0) | 2025.03.18 |
비지도학습 : 차원축소 - LDA(Linear Discriminant Analysis) (0) | 2025.03.17 |
비지도학습 : 차원축소 - t-SNE(t-Distributed Stochastic Neighbor Embedding) (2) | 2025.03.17 |
비지도학습 : 차원축소 - PCA(Principal Component Analysis, 주성분 분석) (0) | 2025.03.17 |