
AdaBoost [medium]
v1 Weighted Stump 한 개로는 약한 분류기 (weak learner). AdaBoost (Freund & Schapire 1997): T 라운드 반복, 매번 오분류된 샘플의 가중치를 증가 시켜 다음 stump 이 집중하게 함.
알고리즘 (Discrete AdaBoost, y ∈ {-1, +1})
- 초기화: wi=1/N.
- t=1,…,T:
- 가중 stump ht fit.
- 가중 오류율: ϵt=∑iwi⋅1[ht(xi)=yi].
- 만약 ϵt≥0.5 → 멈춤 (weak learner 조건 실패).
- 가중치 αt=21logϵt1−ϵt.
- 업데이트: wi←wi⋅exp(−αtyiht(xi)), 정규화.
- 최종 예측: H(x)=sign(∑tαtht(x)).
직관
- ϵt 작음 → αt 크게 (좋은 learner 에 큰 투표권).
- 오분류된 샘플: yiht(xi)=−1 → wi 증가.
- 맞은 샘플: yiht(xi)=+1 → wi 감소.
과제
함수 fit_predict_adaboost(X_train, y_train, X_test, n_estimators) 를 완성하세요.
y_train ∈ {-1, +1}.
- 반환:
y_test_pred ∈ {-1, +1}, shape (M,).
- 각 round 에서 stump 을 fit → α 계산 → 가중치 업데이트.
- 중간에 ϵ≥0.5 나오면 종료 (더 쓸 수 없는 learner).
- ϵ=0 에서 α 폭주 방지:
ε = clip(ε, 1e-10, 1 - 1e-10).
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | shape (M,) + 값 ∈ {-1, +1} | |
| 2 | 선형 분리 가능 → 100% | 단일 stump 로도 충분 |
| 3 | 2D XOR → n_estimators=3 에서 100% | stump 하나로 못 풀지만 boost 로 가능 |
| 4 | n_estimators=1 → 단일 stump 결과와 동일 | |
| 5 | n_estimators 증가 → train accuracy 개선 | |
| 6 | n_estimators 크게 늘려도 폭주 없음 (여러 seed) | |
| 7 | sklearn AdaBoostClassifier 와 비슷한 test acc (+-5%) | |