
BaggingClassifier와 AdaBoost를 코드로 비교하며 배깅과 부스팅의 차이를 명확히 이해합니다
학습 목표: 배깅과 부스팅이라는 두 가지 샘플링 기반 앙상블 전략의 원리를 학습하고, 각각의 특성을 이해한 후 실무에서 올바른 기법을 선택하는 능력을 갖춥니다.
1. 배깅(Bagging)이란?
배깅(Bootstrap Aggregating)은 원본 데이터에서 복원 추출(Bootstrapping)을 통해 여러 개의 부분 데이터셋을 생성한 후, 각각에 대해 동일한 모델을 학습하고 결과를 결합하는 기법입니다.
💡 핵심 원리: 다양한 데이터 부분집합으로 학습한 여러 모델의 예측을 평균(회귀) 또는 투표(분류)로 결합하면, 높은 분산을 가진 불안정한 모델의 분산을 크게 감소시킬 수 있습니다.
배깅의 특징:
- 병렬 처리 가능 (각 모델은 독립적)
- 분산(Variance) 감소에 효과적
- 결정 트리같은 불안정한 모델에 유리
- 편향(Bias)은 원본 모델과 동일
- 복원 추출로 약 63.2%의 고유 샘플 포함
2. BaggingClassifier 구현
scikit-learn의 BaggingClassifier를 사용하여 결정 트리 기반의 배깅 모델을 구현합니다. Wine 데이터셋을 활용합니다.
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine
# Wine 데이터 로드
wine = load_wine()
X, y = wine.data, wine.target
# 학습/테스트 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=1
)
# 기본 결정 트리 (제약 없음)
tree = DecisionTreeClassifier(criterion='entropy', max_depth=None, random_state=1)
# 배깅 분류기: 500개의 부트스트랩 표본으로 500개 트리 학습
bag = BaggingClassifier(
estimator=tree,
n_estimators=500, # 500개 부트스트랩 표본
max_samples=1.0, # 전체 데이터 크기 사용
max_features=1.0, # 모든 피처 사용
bootstrap=True, # 복원 추출
bootstrap_features=False, # 피처는 복원 추출 안 함
n_jobs=-1, # 모든 CPU 코어 사용
random_state=1
)
3. 단일 결정 트리 vs 배깅 성능 비교
단일 결정 트리의 높은 분산 문제를 배깅이 어떻게 해결하는지 실제 정확도로 비교합니다.
from sklearn.metrics import accuracy_score
# 단일 결정 트리 학습 및 평가
tree = tree.fit(X_train, y_train)
tree_train = accuracy_score(y_train, tree.predict(X_train))
tree_test = accuracy_score(y_test, tree.predict(X_test))
# 배깅 분류기 학습 및 평가
bag = bag.fit(X_train, y_train)
bag_train = accuracy_score(y_train, bag.predict(X_train))
bag_test = accuracy_score(y_test, bag.predict(X_test))
# 결과 비교
print(f'단일 트리 - 학습: {tree_train:.4f}, 테스트: {tree_test:.4f}')
print(f'배깅 - 학습: {bag_train:.4f}, 테스트: {bag_test:.4f}')
# 배깅은 보통 테스트 성능이 크게 향상됨
📊 기대되는 결과: 단일 트리는 높은 과적합을 보이지만(학습 정확도 높음, 테스트 정확도 낮음), 배깅은 이 격차를 크게 줄입니다.
4. AdaBoost (에이다부스트)란?
AdaBoost(Adaptive Boosting)는 순차적으로 모델을 학습하되, 이전 모델에서 잘못 분류한 샘플에 더 높은 가중치를 부여하여 학습하는 앙상블 기법입니다.
💡 핵심 원리: 약한 분류기들을 순차적으로 결합하되, 각 분류기는 이전 분류기가 실수한 샘플에 집중합니다. 최종 예측은 각 분류기의 가중 투표로 결정됩니다.
부스팅의 특징:
- 순차적 학습 (병렬 처리 불가)
- 편향(Bias)과 분산 모두 감소
- 약한 분류기를 강한 분류기로 변환
- 샘플 가중치 적응적 조정
- 과적합 위험도 존재
5. AdaBoostClassifier 구현
scikit-learn의 AdaBoostClassifier를 사용하여 부스팅 모델을 구현합니다. 깊이 1의 약한 결정 트리를 기본 학습기로 사용합니다.
from sklearn.ensemble import AdaBoostClassifier
# 약한 학습기: 깊이 1의 결정 트리 (스텀프)
tree = DecisionTreeClassifier(criterion='entropy', max_depth=1, random_state=0)
# AdaBoost 분류기
ada = AdaBoostClassifier(
estimator=tree,
n_estimators=500, # 500개의 약한 분류기
learning_rate=0.1, # 학습률 (가중치 조정도)
random_state=1
)
# 모델 학습
ada.fit(X_train, y_train)
# 성능 평가
ada_train = accuracy_score(y_train, ada.predict(X_train))
ada_test = accuracy_score(y_test, ada.predict(X_test))
print(f'AdaBoost - 학습: {ada_train:.4f}, 테스트: {ada_test:.4f}')
6. 결정 트리 vs 배깅 vs AdaBoost 비교
세 가지 모델의 성능을 종합적으로 비교하고, 각 기법의 특성을 명확히 이해합니다.
import pandas as pd
# 결과 종합 비교
comparison = pd.DataFrame({
'모델': ['단일 트리', '배깅', '부스팅'],
'학습 정확도': [tree_train, bag_train, ada_train],
'테스트 정확도': [tree_test, bag_test, ada_test],
'과적합 정도': [tree_train - tree_test,
bag_train - bag_test,
ada_train - ada_test]
})
print(comparison.to_string(index=False))
| 구분 | 단일 결정 트리 | 배깅 | AdaBoost |
|---|---|---|---|
| 학습 방식 | 단일 모델 | 병렬 (독립적) | 순차적 (의존적) |
| 편향 감소 | - | 약함 | 강함 |
| 분산 감소 | - | 강함 | 강함 |
| 과적합 위험 | 높음 | 낮음 | 중간~높음 |
| 계산 효율 | 높음 | 높음 (병렬) | 낮음 (순차) |
배깅 vs 부스팅 선택 기준
배깅을 선택해야 할 때:
- 불안정한 모델(결정 트리)의 분산이 주 문제일 때
- 높은 계산 효율이 필요할 때
- 병렬 처리가 가능할 때
부스팅을 선택해야 할 때:
- 편향과 분산을 모두 줄여야 할 때
- 약한 분류기를 강력한 분류기로 변환해야 할 때
- 최고 성능이 최우선일 때 (계산 비용 감수)
- 과적합을 주의깊게 모니터링할 수 있을 때
📌 요점 정리:
• 배깅: 병렬 처리로 분산 감소, 결정 트리에 최적
• 부스팅: 순차 학습으로 편향+분산 감소, 최고 성능 추구
• 배깅은 분산이 높은 모델에, 부스팅은 약한 모델에 적합
• 부스팅이 성능은 우수하지만 과적합 관리가 필수
• GridSearchCV로 n_estimators, learning_rate 등을 튜닝
학습 정리:
본 편에서는 배깅과 부스팅이라는 두 가지 샘플링 기반 앙상블 기법의 근본적인 차이를 이해했습니다. 배깅은 높은 분산을 가진 모델의 안정성을 개선하고, 부스팅은 약한 분류기들을 순차적으로 결합하여 강력한 모델을 구축합니다. 각 기법의 특성을 명확히 이해하면 실무에서 상황에 맞는 최적의 앙상블 기법을 선택할 수 있습니다.
'정보 > IT 지식 정보' 카테고리의 다른 글
| RANSAC과 다항 회귀 — 이상치와 비선형 관계 다루기 [7편] (0) | 2026.04.04 |
|---|---|
| 선형 회귀란? 경사 하강법으로 직접 구현하기 [6편] (0) | 2026.04.03 |
| 앙상블 학습이란? 보팅 분류기로 모델 성능 높이기 [4편] (0) | 2026.04.02 |
| GridSearchCV vs RandomizedSearchCV — 최적의 하이퍼파라미터 찾기 [3편] (0) | 2026.04.01 |
| ROC 곡선과 PR 곡선 완전 이해 — 분류 모델의 진짜 성능 읽기 [2편] (0) | 2026.03.31 |
댓글