
v1 K-fold 은 무작위 셔플 + k 분할. 클래스 불균형 데이터에서는 어떤 fold 의 validation 에 희귀 클래스가 0 개 나오는 사고 발생 가능 → 해당 fold 의 평가 지표가 무의미.
Stratified K-fold: 각 클래스 내부에서 따로 섞어 분할 → 모든 fold 가 원본 클래스 비율 유지.
for c in unique(y):
idx_c = indices where y == c
shuffle(idx_c)
split idx_c 를 k 조각으로
fold_i:
val = concat(c 별 chunk_i for all c)
train = concat(c 별 chunk_j for j ≠ i)
각 fold 의 validation 에 모든 클래스가 적어도 1 개씩 나타나는 것 보장 (클래스 빈도 ≥ k 조건).
sklearn.model_selection.StratifiedKFold 와 동등 기능.함수 stratified_k_fold(y, k, seed) 를 완성하세요.
y shape (N,): 정수 레이블.k 의 리스트, 각 원소는 (train_idx, val_idx) 튜플 (numpy int 배열).| # | 이름 | 검증 |
|---|---|---|
| 1 | 길이 = k | |
| 2 | val 합집합 = 전체 | |
| 3 | val 간 disjoint | |
| 4 | train + val = 전체 (각 fold) | |
| 5 | 각 fold val 이 모든 클래스 포함 | 불균형에서도 |
| 6 | val 내 클래스 비율 ≈ 원본 비율 (strat 핵심) | |
| 7 | sklearn StratifiedKFold 와 같은 fold 구성 (set 기준) |
코드를 작성하고 Run 을 눌러보세요.