Случайное деление и сохранение таблицы SQL в процентах - PullRequest
1 голос
/ 25 октября 2019

Я пытаюсь разделить базу данных в SSMS Microsoft (SQL Server) с целью использования данных в приложении машинного обучения.

Я хотел бы разделить данные на таблицы обучения и тестирования по адресураскол 80/20. К сожалению, единственный способ сделать это - взять верхние 20% таблицы для набора тестов и затем установить оставшиеся данные в качестве обучающего набора (ВЫБРАТЬ ТОП 20 процентов ОТ ...).

Я не хочу этого делать, так как тогда мои тестовые и обучающие наборы полностью основаны на том, как они организованы в SQL, а не на каком-то случайном заполнении.

Моя конечная цель будетчтобы разделить поезд / тест 80/20, который я мог бы использовать в хранимых процедурах Python в SQL Server.

1 Ответ

0 голосов
/ 25 октября 2019

Чтобы сгенерировать случайное распределение, вы можете order by newid():

select top 20 percent * from mytable order by newid()

Возможно, вы захотите взглянуть на предложение tablesample, доступное с SQL Server 2015. У него есть опция под названиемrepeatable, который позволяет запросу возвращать один и тот же случайный набор записей каждый раз, когда вы его запускаете (до тех пор, пока заданное начальное число остается неизменным и таблица не изменяется). Это может быть удобно для вашего случая использования:

select top 20 percent * from mytable order by tablesample(20 percent) repeatable(10)
...