Можно ли разделить набор данных в Google Dataprep? Если так, то как?
Я искал Google Dataprep как решение ETL для выполнения базовых преобразований данных, прежде чем передавать их на платформу машинного обучения. Мне интересно, можно ли использовать инструменты Dataprep/Dataflow для разделения набора данных на наборы поездов, тестов и проверок. В идеале я собираюсь сделать стратифицированное разделение на целевом столбце, но для начала я бы согласился на простое равномерное случайное разделение на процент от целого (например, 50% поезда, 30% проверки, 20% теста).
До сих пор я не смог найти что-либо о том, возможно ли это даже с помощью Dataprep, поэтому мне интересно, знает ли кто-нибудь окончательно, возможно ли это, и если да, то как это сделать.
РЕДАКТИРОВАТЬ 1
Спасибо @jakub-janoštík за то, что меня направили в правильном направлении! Я немного изменил ваш ответ и придумал следующее (в форме спора):
case condition: customConditions cases: [false,0] default: rand() as: 'split_condition'
case condition: customConditions cases: [split_condition < 0.6,'train'],[split_condition >= 0.8,'test'] default: 'validation' as: 'dataset_type'
drop col: split_condition action: Drop
Назначая случайные значения в отдельном шаге, я получил гарантированное процентное разделение, которое я искал. Поток в итоге выглядел так:
Изображение: окончательная блок-схема с разделением набора данных
РЕДАКТИРОВАТЬ 2
Я просто выяснил, как сделать стратифицированное разбиение, поэтому я решил добавить его на тот случай, если кто-то еще попытается это сделать. Вот грубые шаги:
- Разделите ваш набор данных по тем подгруппам, на которые вы нацелены (например, target0, target1)
- Для каждой подгруппы выполните равномерное случайное разбиение, описанное выше (например, теперь у вас есть target0-train, target0-test, target0-validation, target1-train и т. Д.)
- Для каждого типа набора (например, поезд, тест, проверка):
- Создать новый рецепт из одного из наборов
- Отредактируйте рецепт и используйте преобразование "Объединение", чтобы объединить его с другими наборами данных того же типа (например, объединение target0-train с target1-train). Кнопка объединения находится в середине панели инструментов на странице "Редактировать рецепт".
Надеюсь, это кому-нибудь пригодится!
1 ответ
Я смотрю на ту же проблему, и мне удалось частично решить ее, используя функции "case on custom condition" и "Random". Я создаю новый столбец с именем target и применяю следующую логику:
После применения этого у вас будет новый столбец с этими 3 новыми метками, и вы можете сгенерировать 3 новых набора данных, применяя правила фильтрации строк на основе этих значений. Следует помнить, что каждый раз, когда вы будете запускать задание, вы будете получать разные проверки. Поэтому, если вы хотите сохранить его фиксированным, вам нужно использовать набор данных, созданный при первом запуске, в качестве входных данных для будущих прогонов (и рандомизировать только наборы поездов и тестов).
Если вам нужен больший контроль над распределением меток в ваших наборах данных, есть функция окна ROWNUMBER, которая потенциально может быть использована. Но я пока не смог заставить его работать.