⊢MachineLearning

앙상블 학습 : 배깅(Bagging)과 부스팅(Boosting)

최 수빈 2025. 3. 17. 22:14

 

앙상블 학습(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) 순차적 학습 이전 모델의 오류를 보완하며 학습 높은 예측 성능, 강력한 모델 성능 연산량이 많고 학습 시간이 오래 걸림, 과적합 위험

배깅은 여러 개의 모델을 독립적으로 학습하여 안정적인 성능과 과적합 방지 효과가 있음

부스팅은 이전 모델의 오류를 보완하는 방식으로 높은 예측 성능을 제공하지만 학습 시간이 길고 과적합 위험이 있음

→ 데이터 특성과 모델 성능 요구 사항에 따라 적절한 기법 선택