Установите их как 'group'
. Большинство сплиттеров в sklearn поддерживают параметр с именем groups
, который можно настроить так, чтобы вы делали что хотите
Пример:
Вы можете использовать GroupKFold или GroupShuffleSplit :
group_kfold = GroupKFold(n_splits=3)
for train_index, test_index in group_kfold.split(df, groups=df.index):
print("Train", df.iloc[train_index].index)
print("Test", df.iloc[test_index].index)
Output:
('Train', Int64Index([1, 1, 1, 2, 2, 3, 4, 4], dtype='int64', name=u'A'))
('Test', Int64Index([5, 6, 6, 6], dtype='int64', name=u'A'))
('Train', Int64Index([2, 2, 4, 4, 5, 6, 6, 6], dtype='int64', name=u'A'))
('Test', Int64Index([1, 1, 1, 3], dtype='int64', name=u'A'))
('Train', Int64Index([1, 1, 1, 3, 5, 6, 6, 6], dtype='int64', name=u'A'))
('Test', Int64Index([2, 2, 4, 4], dtype='int64', name=u'A'))
Вы можете видеть, что последнее разделение теста поезда соответствует вашим требованиям. Все сгибы будут иметь данные, которые могут быть либо обучающими, либо тестовыми, но не обоими.