我正在开发一个应用程序,需要从一个非常大的数据集中抽取一小部分值,数量级在60万亿左右(并且还在增长)。
通常,我使用一种技术来判断是否一个均匀随机数r(0..1)小于S/T,其中S是我仍然需要的样本项数,T是我尚未考虑的集合中的项目数。
然而,对于这个新数据,我没有时间为每个值掷骰子;太多了。相反,我想生成一个要“跳过”的条目的随机数量,选择下一个位置的值,然后重复。这样我就可以只掷骰子并访问列表S次。(S是我想要的样本大小。)
我希望有一种简单的方法来实现这一点,并创建一个无偏样本,类似于S/T测试。
- 老实说,近似无偏也可以。 - 这与此人的问题相关(或多或少是一个后续问题)。
通常,我使用一种技术来判断是否一个均匀随机数r(0..1)小于S/T,其中S是我仍然需要的样本项数,T是我尚未考虑的集合中的项目数。
然而,对于这个新数据,我没有时间为每个值掷骰子;太多了。相反,我想生成一个要“跳过”的条目的随机数量,选择下一个位置的值,然后重复。这样我就可以只掷骰子并访问列表S次。(S是我想要的样本大小。)
我希望有一种简单的方法来实现这一点,并创建一个无偏样本,类似于S/T测试。
- 老实说,近似无偏也可以。 - 这与此人的问题相关(或多或少是一个后续问题)。
https://math.stackexchange.com/questions/350041/simple-random-sample-without-replacement
- 还有一个附带问题...第一个向我展示这个的人称其为“邮递员算法”,但我不确定他是否在开玩笑。这是正确的吗?
S
个随机数,并将它们乘以所有项目的数量以获得数据集中的索引。请注意,在选择下一个随机数时留出已选数字是您需要考虑的事情。 - Sean Connolly