실습 · 연습문제 1개
scaffold 분할 구현하기 scaffold-split
분자마다 골격(scaffold) 레이블이 주어진다. 같은 골격의 분자가 train과 test에 나뉘어 들어가지 않도록, 골격 단위로 분자를 나누는 함수 scaffold_split(scaffolds, test_frac=0.2)를 완성한다.
규칙은 다음과 같다(결정적 규칙이라 같은 입력에 항상 같은 결과를 낸다).
- 골격을 분자 수가 많은 것부터 정렬한다. 분자 수가 같으면 데이터에 먼저 나타난 골격이 앞선다.
- 정렬한 순서대로, 그 골격을 train에 넣어도 train 크기가 을 넘지 않으면 train에 넣는다. 넘으면 test에 넣는다.
| 인자 | 의미 |
|---|---|
scaffolds |
길이 의 골격 레이블 목록(문자열이나 정수) |
test_frac |
test에 둘 분자 비율의 목표값 |
반환값은 (train_idx, test_idx)로, 각각 정렬된 정수 인덱스 배열이다.
테스트는 다음을 확인한다.
- 모든 분자가 정확히 한쪽에 들어간다.
- train과 test가 골격을 공유하지 않는다.
- 가장 큰 골격은 train에 들어간다.
- test 비율이 목표에 가깝다.
큰 골격을 train에 두는 이유: test가 작은 골격들, 즉 드물게 탐색된 화학 구조로 채워져 새로운 구조에 대한 일반화를 더 엄격하게 잰다.