Разделение данных в Python таким образом, что каждый субъект остается в один раз (перекрестная проверка m раз) - PullRequest
0 голосов
/ 28 января 2019

Так вот в чем дело.Я применяю бинарный классификатор для 5 пациентов (P1, P2, ... P5).у каждого пациента есть 100 выборок данных, и результат равен либо 0, либо 1.

Поэтому я отложил одного пациента (скажем, P5) в качестве данных тестирования и использовал оставшихся для проверки и обучения.Но я также хочу найти оптимальное количество гиперпараметров для классификатора (скажем, SVM), поэтому я также использую 4-кратную перекрестную проверку.

Однако я хочу убедиться, что я разделил обучениеданные для перекрестного тестирования и перекрестного тестирования, так что все выборки одного пациента остаются в перекрестном тестировании.Я не хочу, чтобы это было перетасовано, потому что у меня были бы данные о пациенте как в тестировании, так и во время обучения, что не очень хорошо.

Я использую GridSearchCV в python для разделения данных, но я понятия не имею, какчтобы настроить его таким образом, чтобы у нас было: 100 образцов p1 в тестовом сгибе и все 300 образцов p2, p3, p4 в тренировочном сгибе .......... 100 образцов p4 в тестовом сгибе и все 300 образцовр1, р2, р3 в тренировочной складке.

Другими словами, я хочу создать индикатор пациента, чтобы gridasearchCv разделял данные в соответствии с этим.

У нас есть пакет для этого или я должен попробовать написать его вручную, не используя GridSearchCV или что-то еще?такой природы?

1 Ответ

0 голосов
/ 29 января 2019

Вы должны использовать scikit-learn GroupKFold.Это должно решить вашу проблему легко.Используйте список patients в качестве групп, например, patients[i] == "p2", если образец i принадлежит пациенту 2.

Вот документация .

...