실습 · 연습문제 1개
그룹 K-fold 분할 만들기 group-kfold
같은 그룹(같은 셀, 같은 환자, 같은 단백질 family)의 샘플이 train과 test에 나뉘어 들어가면, 모델은 그룹의 공통 특성을 외워 test를 맞힌다. 처음 보는 그룹에 대한 일반화를 재려면 한 그룹의 모든 샘플이 같은 fold에 있어야 한다.
함수 group_kfold(groups, n_splits)를 완성한다.
groups: 길이 의 배열. 샘플마다 그룹 이름(정수나 문자열)n_splits: fold 수- 반환: 길이 의 정수 배열
fold.fold[i]는 샘플 가 test로 쓰이는 fold 번호()
조건:
- 한 그룹의 샘플은 모두 같은 fold 번호를 가진다.
- 모든 fold에 샘플이 하나 이상 있다. 그룹 수가 보다 적으면
ValueError를 낸다. - fold 크기(샘플 수)가 고르게 나뉜다. 테스트는 가장 큰 fold와 가장 작은 fold의 크기 차이가 가장 큰 그룹의 크기 이하인지 확인한다.
힌트: 그룹을 크기가 큰 것부터 차례로, 현재 가장 작은 fold에 넣는다(greedy). 크기가 같은 그룹은 이름 순으로 처리하면 결과가 결정적이다.
이 분할은 fold마다 샘플 수를 맞출 뿐, label의 분포까지 맞추지는 않는다. 그룹 수가 적으면 fold마다 label 분포가 크게 다를 수 있으니 fold별 label 분포도 함께 확인한다.