Можно ли разделить набор данных в Google Dataprep?Если так, то как? - PullRequest
0 голосов
/ 21 сентября 2018

Я искал 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

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

  1. Разделите ваш набор данных на основе любых подгрупп населения, на которые вы нацеливаетесь (например, target0, target1)
  2. Для каждой подгруппы выполните равномерное случайное разделение, описанное выше (например,теперь у вас есть target0-train, target0-test, target0-validation, target1-train и т. д.)
  3. Для каждого типа набора (т. е. train, test, validation):
    • Создать новыйрецепт из одного из наборов
    • Отредактируйте рецепт и используйте преобразование Union, чтобы объединить его с другими наборами данных того же типа (например, target0-train union с target1-train).Кнопка объединения находится в центре панели инструментов на странице «Редактировать рецепт».

Надеюсь, это кому-нибудь пригодится!

1 Ответ

0 голосов
/ 21 сентября 2018

Я смотрю на ту же проблему, и мне удалось частично решить ее, используя функции "case on custom condition" и "Random".Я создаю новый столбец с именем target и применяю следующую логику:

enter image description here

После применения этого у вас будет новый столбец с этими 3 новымиметки, и вы можете создать 3 новых набора данных, применяя правила фильтрации строк на основе этих значений.Следует помнить, что каждый раз, когда вы будете запускать задание, вы будете получать разные проверки.Поэтому, если вы хотите сохранить его фиксированным, вам нужно использовать набор данных, созданный при первом запуске, в качестве входных данных для будущих прогонов (и рандомизировать только наборы обучений и тестов).

Если вам нужен больший контроль над распределением меток вВ ваших наборах данных есть функция окна ROWNUMBER, которая потенциально может быть использована.Но я пока не смог заставить его работать.

...