按百分比随机划分和存储 SQL Table

Randomly Dividing and Storing a SQL Table by Percentage

我正在尝试在 Microsoft 的 SSMS(SQL 服务器)中拆分数据库,以便在机器学习应用程序中使用数据。

我想以 80/20 的比例将数据分为训练和测试 tables。不幸的是,我知道这样做的唯一方法是将 table 的前 20% 用于测试集,然后将其余数据设置为训练集(SELECT TOP 20% FROM ...)。

我不想这样做,因为我的测试和训练集完全基于它们在 SQL 中的组织方式,而不是一些随机播种。

我的最终目标是在 SQL 服务器的 Python 存储过程中使用 80/20 train/test 拆分。

要生成随机分布,您可以order by newid():

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

您可能还想查看自 SQL Server 2015 起可用的 tablesample 子句。它有一个名为 repeatable 的选项,可以让查询 return 每次你 运行 它时都是相同的随机记录集(只要给定的种子保持不变并且 table 没有被修改)。这对您的用例可能很方便:

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