
v1 shuffle split 은 복원 없이 랜덤 분할. Bootstrap (Efron 1979) 은 복원 샘플링 으로 개의 훈련 샘플을 뽑고, 선택 안 된 것 (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]
각 샘플이 bootstrap 에서 안 뽑힐 확률:
즉 평균적으로 ~37% 가 OOB 가 됨. 이 특성 덕분에 Random Forest 등이 별도의 validation set 없이 OOB error 를 estimator 로 활용.
함수 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 | |
| 2 | train shape = (n,) (복원) | |
| 3 | train 에 중복 존재 | bootstrap 특징 |
| 4 | train ∩ oob = ∅ | |
| 5 | train ∪ oob = 전체 | |
| 6 | 평균 OOB 분율 ≈ 1/e | 많은 iter 평균 |
| 7 | 시드 재현성 |
코드를 작성하고 Run 을 눌러보세요.