У меня есть пример данных следующим образом:
import pandas as pd
df = pd.DataFrame({"x": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120],
"id": [1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5],
"label": ["a", "a", "a", "b", "a", "b", "b", "b", "a", "b", "a", "b"]})
Итак, мои данные выглядят так:
x id label
10 1 a
20 1 a
30 1 a
40 1 b
50 2 a
60 2 b
70 3 a
80 3 a
90 4 b
100 4 a
110 5 b
120 5 a
Я хотел бы разделить эти данные на две группы (поезд, тест) на основе распределения этикеток с учетом количества тестируемых образцов (например, 6 образцов). Мои настройки предпочитают определять размер набора тестов как целое число, представляющее количество тестовых образцов, а не процент. Однако с моим указанным c доменом любой идентификатор ДОЛЖЕН быть распределен ТОЛЬКО в одной группе. Например, если идентификатор 1 был назначен обучающему набору, другие образцы с идентификатором 1 не могут быть назначены тестовому набору. Таким образом, ожидаемые выходные данные представляют собой 2 кадра данных следующим образом:
Учебный набор
x id label
10 1 a
20 1 a
30 1 a
40 1 b
50 2 a
60 2 b
Тестовый набор
x id label
70 3 a
80 3 a
90 4 b
100 4 a
110 5 b
120 5 a
И обучающий набор, и тестовый набор имеют одинаковое распределение классов ( a: b равно 4: 2) и идентификаторы 1, 2 были назначены только обучающему набору, а идентификаторы 3, 4, 5 были назначены только тестовому набору. Я имел обыкновение делать с sklearn train_test_split
, но я не мог понять, как применять его с таким условием. Могу ли я получить ваши предложения, как справиться с такими условиями?