← 문제 목록/AdaBoost (weighted stump 조립) [medium]
문제 해설

AdaBoost (weighted stump 조립) [medium]

앙상블 · medium

preview

AdaBoost [medium]

v1 Weighted Stump 한 개로는 약한 분류기 (weak learner). AdaBoost (Freund & Schapire 1997): T 라운드 반복, 매번 오분류된 샘플의 가중치를 증가 시켜 다음 stump 이 집중하게 함.

알고리즘 (Discrete AdaBoost, y ∈ {-1, +1})

  1. 초기화: wi=1/Nw_i = 1/N.
  2. t=1,,Tt = 1, \ldots, T:
    • 가중 stump hth_t fit.
    • 가중 오류율: ϵt=iwi1[ht(xi)yi]\epsilon_t = \sum_i w_i \cdot \mathbb{1}[h_t(x_i) \ne y_i].
    • 만약 ϵt0.5\epsilon_t \ge 0.5 → 멈춤 (weak learner 조건 실패).
    • 가중치 αt=12log1ϵtϵt\alpha_t = \tfrac{1}{2} \log\tfrac{1 - \epsilon_t}{\epsilon_t}.
    • 업데이트: wiwiexp(αtyiht(xi))w_i \gets w_i \cdot \exp(-\alpha_t y_i h_t(x_i)), 정규화.
  3. 최종 예측: H(x)=sign(tαtht(x))H(x) = \text{sign}\left(\sum_t \alpha_t h_t(x)\right).

직관

  • ϵt\epsilon_t 작음 → αt\alpha_t 크게 (좋은 learner 에 큰 투표권).
  • 오분류된 샘플: yiht(xi)=1y_i h_t(x_i) = -1wiw_i 증가.
  • 맞은 샘플: yiht(xi)=+1y_i h_t(x_i) = +1wiw_i 감소.

과제

함수 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\epsilon \ge 0.5 나오면 종료 (더 쓸 수 없는 learner).
  • ϵ=0\epsilon = 0 에서 α\alpha 폭주 방지: ε = clip(ε, 1e-10, 1 - 1e-10).

테스트 케이스

#이름검증
1shape (M,) + 값 ∈ {-1, +1}
2선형 분리 가능 → 100%단일 stump 로도 충분
32D XOR → n_estimators=3 에서 100%stump 하나로 못 풀지만 boost 로 가능
4n_estimators=1 → 단일 stump 결과와 동일
5n_estimators 증가 → train accuracy 개선
6n_estimators 크게 늘려도 폭주 없음 (여러 seed)
7sklearn AdaBoostClassifier 와 비슷한 test acc (+-5%)
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.