首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从无限流中选择10%的随机数

从无限流中选择10%的随机数
EN

Stack Overflow用户
提问于 2013-05-22 23:43:51
回答 3查看 493关注 0票数 3

有一连串的数字即将到来。在任何时候,我都可能需要10%的随机数。我显然不想存储整个流。

更大的问题是我正在考虑上面的算法。我有很多数据(基于时间戳)进入数据库。现在我还想建立一个示例表,它包含了主数据库表中10%的记录,但是是随机的,所以如果想要快速查询,我可以用很少的不准确来快速查询。我分批收到消息(号码),说有时是100,有时是20,有时是5等等。

我在想,我会在流媒体的时候这样做,这是问题所在。有人能为此提出一个好的算法吗?有没有更好的方法?

EN

回答 3

Stack Overflow用户

发布于 2013-05-22 23:56:55

如果您想要在传入流上模拟一个真正随机的10%样本,您可以使用均值为9的Poisson Distribution来决定在记录下一个条目之前跳过多少个条目。不过,设置一个上限可能是个好主意,这样你就不会在数据中出现罕见的、但可以预见的巨大差距。

票数 3
EN

Stack Overflow用户

发布于 2013-05-23 13:04:58

公式

下面是我如何阐述这个问题的。让你的(可能无限的)序列中的项为i=1,2,...。假设您想从序列中获取大约0 < z < 1项,以生成更稀疏的序列。让x(i)表示我们是否在生成的稀疏序列中包含项i

对于任何包含n个连续项目的窗口(在其中选择n >= 1),您希望项目的预期数量为z*n,但可能会与该预期有所不同。为此,您可以使用具有均值z*n和标准差d的(截断)二项分布(link) (其中您选择d > 0)。(它在右边被截断了,因为当只有n需要考虑时,您不可能选择超过n的项目!您还可以在左侧将其截断为“我总是希望每个n中至少有m项,其中mz*n小得多,但我假设您跳过了这一步。”

现在,您可以根据是否包含每个n-1前面的项i-1,i-2,...,i-(n-1)来确定在生成的稀疏序列中包含项i的概率

代码语言:javascript
复制
A = P( x(i) = 1 | x(i - j), 1 <= j < n )

这一切意味着什么?

在这个公式中,你选择了三个数字:

  • 0 < z < 1 z = 0.1

  • 在您的问题中,您已将z指定为10%,即

  • n >= 1和pattern
  • n = 1
  • n看作是窗口大小,并将

看作是从常规采样到更嘈杂的采样的偏差量。pattern

  • n = 1意思是“包括具有概率的每一项,而不管其他项是否被包括在稀疏sequence
  • n = 100, d = 0.0001中”,除非在极其罕见的情况下,在稀疏序列中的每个连续的D51中包括D50项“F152i >H153z >如果您使D54非常小,你基本上是在说“在一个常规的pattern"

中选择每一项1/z

代码语言:javascript
复制
- `n = 100, d = 5` means "include roughly `5` to `15` out of each consecutive `100` items in the sparser sequence"

票数 1
EN

Stack Overflow用户

发布于 2013-05-23 00:02:32

以评论中的例子为例:

  • 数据之间没有相关性。
  • 您需要在一天中的特定时间获取样本。

在这种情况下,您可以跟踪每个时间间隔内传入的数据总数--例如,餐厅每半小时营业一次。(或者甚至只是一个0到9的计数器,当您达到10时,该计数器将重置为零。)

抓起你在每个时间间隔内看到的第一个,让九个掉在地板上。

冲洗并重复,你应该为每个时间间隔建立一个好的10%的采样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16696138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档