일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 지도 학습
- Machine Learning
- 과적합
- 딥러닝
- q-러닝
- 교차 검증
- LSTM
- rnn
- 머신러닝
- reinforcement learning
- 차원 축소
- 인공 신경망
- 강화학습
- CNN
- 자연어 처리
- Deep learning
- 신경망
- GRU
- 정규화
- 손실 함수
- Q-Learning
- 인공지능
- 회귀
- 최적화
- 머신 러닝
- 강화 학습
- 활성화 함수
- 데이터 전처리
- AI
- python
- Today
- Total
move84
배깅(Bagging)과 부스팅(Boosting): 앙상블 방법론 완벽 분석 본문
배깅과 부스팅은 머신러닝에서 강력한 성능을 제공하는 앙상블 방법론입니다. 이 두 기법은 여러 개의 약한 학습기(weak learner)를 결합하여 하나의 강력한 학습기(strong learner)를 만드는 데 사용됩니다. 본 포스트에서는 배깅과 부스팅의 기본 개념, 작동 원리, 장단점, 그리고 실제 코드 예제를 통해 자세히 알아보겠습니다.
🚀 배깅(Bagging)이란?
배깅(Bagging)은 Bootstrap Aggregating의 약자로, 통계적 샘플링 기법인 부트스트랩(Bootstrap)을 사용하여 여러 개의 데이터셋을 생성하고, 각 데이터셋에 대해 독립적으로 학습된 모델들을 결합하는 앙상블 방법입니다. 배깅의 핵심은 데이터의 중복을 허용하는 리샘플링(Resampling)을 통해 다양한 데이터셋을 만들고, 이 데이터셋들을 기반으로 여러 모델을 학습시킨다는 점입니다.
🛠️ 배깅의 작동 원리
- 부트스트랩 샘플링(Bootstrap Sampling): 원본 데이터셋에서 중복을 허용하여 N개의 데이터셋을 생성합니다. 각 데이터셋은 원본 데이터셋과 크기가 같지만, 일부 샘플은 여러 번 포함될 수 있고, 일부 샘플은 아예 포함되지 않을 수도 있습니다.
- 개별 모델 학습: 각 부트스트랩 데이터셋에 대해 독립적으로 학습된 모델을 생성합니다. 일반적으로 결정 트리(Decision Tree)와 같은 불안정한(unstable) 모델이 배깅에 적합합니다.
- 예측 결합(Aggregation): 모든 모델의 예측 결과를 결합하여 최종 예측을 수행합니다. 분류(Classification) 문제에서는 다수결 투표(Majority Voting) 방식을 사용하고, 회귀(Regression) 문제에서는 평균(Averaging)을 사용합니다.
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score
# 가상 데이터 생성
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 배깅 분류기 생성 및 학습
bagging_clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(),
n_estimators=100, # 트리의 개수
random_state=42)
bagging_clf.fit(X_train, y_train)
# 예측 및 평가
y_pred = bagging_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"배깅 정확도: {accuracy:.4f}")
👍 배깅의 장점과 단점
장점:
- 분산 감소(Variance Reduction): 배깅은 모델의 분산을 줄여 과적합(Overfitting)을 방지합니다. 여러 모델의 예측을 평균화함으로써 개별 모델의 오류를 상쇄시키는 효과가 있습니다.
- 병렬 처리(Parallel Processing): 각 모델이 독립적으로 학습되므로 병렬 처리가 가능하여 학습 시간을 단축할 수 있습니다.
- 높은 안정성(Stability): 데이터의 작은 변화에 덜 민감하게 반응하여 안정적인 성능을 유지합니다.
단점:
- 편향 증가(Bias Increase): 배깅은 분산을 줄이는 데 효과적이지만, 편향을 증가시킬 수 있습니다. 특히, 원본 모델의 성능이 매우 낮을 경우 배깅을 적용해도 성능 향상이 미미할 수 있습니다.
- 해석의 어려움(Interpretability): 앙상블 모델은 개별 모델에 비해 해석이 어렵습니다.
🚀 부스팅(Boosting)이란?
부스팅(Boosting)은 약한 학습기를 순차적으로 학습시키면서, 이전 모델의 오류를 보완하는 방식으로 모델을 개선해 나가는 앙상블 방법입니다. 배깅과는 달리, 부스팅은 각 모델이 독립적으로 학습되지 않고, 이전 모델의 결과를 반영하여 다음 모델을 학습합니다. 부스팅의 핵심은 이전 모델이 잘못 예측한 데이터에 더 큰 가중치를 부여하여, 다음 모델이 이러한 오류를 줄이도록 유도하는 것입니다.
🛠️ 부스팅의 작동 원리
- 초기 모델 학습: 전체 데이터셋에 대해 초기 모델을 학습합니다.
- 가중치 업데이트: 초기 모델이 잘못 예측한 데이터에 더 큰 가중치를 부여합니다. 올바르게 예측한 데이터에는 더 작은 가중치를 부여합니다.
- 다음 모델 학습: 업데이트된 가중치를 사용하여 다음 모델을 학습합니다. 가중치가 높은 데이터에 더 집중하여 학습합니다.
- 반복: 2단계와 3단계를 반복하여 여러 개의 모델을 순차적으로 학습합니다.
- 예측 결합: 모든 모델의 예측 결과를 결합하여 최종 예측을 수행합니다. 모델의 성능에 따라 가중치를 부여하여 결합할 수도 있습니다.
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score
# 가상 데이터 생성
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# AdaBoost 분류기 생성 및 학습
adaboost_clf = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(max_depth=1), # 약한 학습기 설정
n_estimators=100, # 모델 개수
random_state=42)
adaboost_clf.fit(X_train, y_train)
# 예측 및 평가
y_pred = adaboost_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"AdaBoost 정확도: {accuracy:.4f}")
👍 부스팅의 장점과 단점
장점:
- 높은 정확도(High Accuracy): 부스팅은 약한 학습기를 결합하여 강력한 학습기를 만들기 때문에 높은 정확도를 제공합니다.
- 편향 감소(Bias Reduction): 이전 모델의 오류를 보완하는 방식으로 학습하므로 편향을 줄이는 데 효과적입니다.
단점:
- 과적합 가능성(Overfitting Risk): 부스팅은 학습 데이터에 지나치게 최적화될 수 있어 과적합이 발생할 가능성이 높습니다.
- 학습 시간 증가(Increased Training Time): 모델을 순차적으로 학습해야 하므로 배깅에 비해 학습 시간이 오래 걸릴 수 있습니다.
- 이상치 민감성(Sensitivity to Outliers): 이상치에 민감하게 반응하여 성능이 저하될 수 있습니다.
🆚 배깅 vs 부스팅: 주요 차이점
특징 | 배깅(Bagging) | 부스팅(Boosting) |
---|---|---|
학습 방식 | 병렬 학습 (Parallel Learning) | 순차 학습 (Sequential Learning) |
데이터 샘플링 | 부트스트랩 샘플링 (Bootstrap Sampling) | 가중치 기반 샘플링 (Weight-based Sampling) |
모델 결합 방식 | 다수결 투표 또는 평균 (Majority Voting or Averaging) | 가중치 기반 결합 (Weighted Averaging) |
주요 목표 | 분산 감소 (Variance Reduction) | 편향 감소 (Bias Reduction) |
과적합 방지 | 효과적 (Effective) | 주의 필요 (Requires Caution) |
🎯 결론
배깅과 부스팅은 앙상블 방법론의 핵심적인 기법으로, 각각의 장단점을 이해하고 적절한 상황에 맞게 활용하는 것이 중요합니다. 배깅은 분산을 줄여 과적합을 방지하는 데 효과적이며, 부스팅은 편향을 줄여 높은 정확도를 달성하는 데 유용합니다. 실제 머신러닝 프로젝트에서는 데이터의 특성과 문제의 요구사항을 고려하여 최적의 앙상블 방법을 선택해야 합니다.
📝 핵심 용어 정리
- 배깅 (Bagging): Bootstrap Aggregating의 약자
- 부스팅 (Boosting): 약한 학습기를 강화하는 앙상블 방법
- 앙상블 (Ensemble): 여러 모델을 결합하는 방법
- 분산 (Variance): 예측값들이 흩어진 정도
- 편향 (Bias): 예측값과 실제값의 차이
- 과적합 (Overfitting): 학습 데이터에 지나치게 최적화된 상태
'머신러닝' 카테고리의 다른 글
머신러닝에서 랜덤 시드(Random Seed)의 의미 (0) | 2025.04.14 |
---|---|
머신러닝: 랜덤 포레스트(Random Forest)의 개념 (0) | 2025.04.12 |
머신러닝 앙상블 학습(Ensemble Learning) 소개 및 활용 (0) | 2025.04.12 |
머신러닝에서의 피처 추출(Feature Extraction) (0) | 2025.04.12 |
머신러닝에서의 피처 선택 (0) | 2025.04.12 |