У меня есть фрейм данных с наблюдениями
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. В этом случае две партии в некоторой степени сбалансированы в отношении содержания класса, чего я и хочу.