← 문제 목록/OOB Ensemble Prediction (bagging 평균) [medium]
문제 해설

OOB Ensemble Prediction (bagging 평균) [medium]

앙상블 · medium

preview

OOB Ensemble Prediction [medium]

v1 OOB mask 는 한 부트스트랩의 OOB 인덱스. Random Forest 실제 활용: 각 샘플 ii 에 대해 ii 를 학습에 쓰지 않은 트리들만 골라 예측 → 평균 → "공짜 validation" 이 완성됨.

알고리즘

입력:

  • sample_indices_matrix shape (B, n): BB 개 bag 의 훈련 인덱스 (각 행).
  • tree_preds shape (B, n): 각 tree 가 전체 훈련 X 에 대해 예측한 회귀값.

처리:

for i in range(n):
    oob_trees = [b for b in range(B) if i not in sample_indices_matrix[b]]
    oob_pred[i] = mean(tree_preds[b, i] for b in oob_trees)

효율적 구현은 (B,n)(B, n) OOB 마스크 행렬을 한 번에 만들어 masked average.

주의 사항

  • 샘플 ii모든 bag 에 포함된 경우 (확률 0.368BB\approx 0.368^B \cdot B): OOB 예측 없음 → nan 반환.
  • BB 가 작을수록 nan 발생 확률 ↑.
  • 실무: B=100+B = 100+ 이면 nan 거의 없음 (확률 1043\approx 10^{-43} at n=1).

활용

  • OOB error: y - oob_pred 의 MSE = 별도 val set 없는 일반화 추정.
  • sklearn RandomForestRegressor(oob_score=True).oob_prediction_ 이 바로 이 값.

과제

함수 oob_predictions(sample_indices_matrix, tree_preds) 를 완성하세요.

  • 반환: shape (n,) 부동소수점 배열.
  • 샘플 ii 의 OOB 트리 카운트가 0 이면 np.nan.
  • 힌트:
    B, n = tree_preds.shape
    oob_mask = np.ones((B, n), dtype=bool)
    for b in range(B):
        oob_mask[b, sample_indices_matrix[b]] = False
    counts = oob_mask.sum(axis=0)  # (n,)
    sums = (oob_mask * tree_preds).sum(axis=0)
    

테스트 케이스

#이름검증
1반환 shape (n,)
2모든 트리에서 OOB 인 샘플 → 전체 tree_preds 평균
3샘플이 한 bag 에만 포함 → 나머지 B-1 트리 평균
4모든 bag 에 포함된 샘플 → nan
5B=1, n=1, bag 에 포함 → nan
6OOB error 계산 가능 (유한)
7큰 B (여러 bag) 에서 nan 없음높은 확률적
코드 작성
Loading...
실행 결과

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