← 문제 목록/Stratified K-Fold (클래스 비율 보존) [medium]
문제 해설

Stratified K-Fold (클래스 비율 보존) [medium]

교차검증 · medium

preview

Stratified K-Fold [medium]

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 와 동등 기능.
  • 분류 평가의 기본; imbalanced data 에서는 stratified 가 사실상 필수.

과제

함수 stratified_k_fold(y, k, seed) 를 완성하세요.

  • y shape (N,): 정수 레이블.
  • 반환: 길이 k 의 리스트, 각 원소는 (train_idx, val_idx) 튜플 (numpy int 배열).
  • 각 fold 의 val 에 모든 클래스 포함 (각 클래스 빈도 ≥ k 가정).

테스트 케이스

#이름검증
1길이 = k
2val 합집합 = 전체
3val 간 disjoint
4train + val = 전체 (각 fold)
5각 fold val 이 모든 클래스 포함불균형에서도
6val 내 클래스 비율 ≈ 원본 비율 (strat 핵심)
7sklearn StratifiedKFold 와 같은 fold 구성 (set 기준)
코드 작성
Loading...
실행 결과

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