← 문제 목록/Bootstrap CV (OOB 검증) [medium]
문제 해설

Bootstrap CV (OOB 검증) [medium]

교차검증 · medium

preview

Bootstrap CV (Out-Of-Bag) [medium]

v1 shuffle split복원 없이 랜덤 분할. Bootstrap (Efron 1979) 은 복원 샘플링 으로 NN 개의 훈련 샘플을 뽑고, 선택 안 된 것 (Out-Of-Bag) 을 validation 으로:

알고리즘

rng = np.random.default_rng(seed)
for iteration in range(n_iter):
    train_idx = rng.integers(0, n, size=n)    # 복원 샘플링
    oob_mask = np.ones(n, dtype=bool)
    oob_mask[train_idx] = False
    oob_idx = np.where(oob_mask)[0]

OOB 분율

각 샘플이 bootstrap 에서 안 뽑힐 확률:

(11N)NN1e0.368\left(1 - \frac{1}{N}\right)^N \xrightarrow{N \to \infty} \frac{1}{e} \approx 0.368

즉 평균적으로 ~37% 가 OOB 가 됨. 이 특성 덕분에 Random Forest 등이 별도의 validation set 없이 OOB error 를 estimator 로 활용.

장단점

  • 장점: 반복 수 유연, 통계적 재표본화 근거.
  • 단점: train 에 중복 있음 (같은 샘플 반복 등장), OOB 크기 가변.
  • 각 iteration 이 독립이라 병렬화 쉬움.

과제

함수 bootstrap_cv(n, n_iter, seed) 를 완성하세요.

  • 반환: 길이 n_iter 의 리스트. 각 원소 (train_idx, oob_idx) 튜플 (numpy int 배열).
  • train_idx shape (n,) — 복원 샘플 (중복 허용).
  • oob_idx — train_idx 에 등장 안 한 고유 인덱스.
  • 하나의 rng 로 재현성 확보.

테스트 케이스

#이름검증
1길이 = n_iter
2train shape = (n,) (복원)
3train 에 중복 존재bootstrap 특징
4train ∩ oob = ∅
5train ∪ oob = 전체
6평균 OOB 분율 ≈ 1/e많은 iter 평균
7시드 재현성
코드 작성
Loading...
실행 결과

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