Стратифицированная выборка в питоне с ограничением - PullRequest
0 голосов
/ 07 мая 2019

У меня есть фрейм данных с наблюдениями

data = [['red', 1, 0.2], ['blue', 1, 0.5], ['green', 2, 0.8], ['blue', 2, 0.55], ['blue', 2, 0.52], ['red', 3, 0.15], ['green', 3, 0.85], ['red', 4, 0.12], ['purple', 4, 0.01]] 

df = pd.DataFrame(data, columns = ['label', 'signal', 'value']) 

   label    signal  value
0   red     1   0.20
1   blue    1   0.50
2   green   2   0.80
3   blue    2   0.55
4   blue    2   0.52
5   red     3   0.15
6   green   3   0.85
7   red     4   0.12
8   purple  4   0.01

Я хочу сделать стратифицированную k-кратную выборку по меткам, но мне нужно сделать это так, чтобы никакое значение сигнала не разделялосьскладки.Я сделал это с помощью реализации, которая просто использует словари и сложные проверки.Мне было интересно, если есть более простой способ решить эту проблему?

Результат для K = 2 может быть:

batch 1
0   red     1   0.20
1   blue    1   0.50
5   red     3   0.15
6   green   3   0.85

batch 2
2  green    2   0.80
3   blue    2   0.55
4   blue    2   0.52
7   red     4   0.12
8   purple  4   0.01

, где есть 2 красных, 1 синий, 1 зеленыйв партии 1 и 1 красный, 2 синих, 1 зеленый, 1 фиолетовый в партии 2. В этом случае две партии в некоторой степени сбалансированы в отношении содержания класса, чего я и хочу.

1 Ответ

1 голос
/ 08 мая 2019

Я думаю, что вы ищете функцию GroupShuffleSplit, встроенную в scikit-learn: sklearn.model_selection.GroupShuffleSplit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...