Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 从无限流中选择10%的随机数_Database_Algorithm_Postgresql_Hadoop - Fatal编程技术网

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

Database 从无限流中选择10%的随机数,database,algorithm,postgresql,hadoop,Database,Algorithm,Postgresql,Hadoop,有一连串的数字。在任何时候,我都可能需要10%的随机数。 我显然不想存储整个流 更大的问题是我在考虑上面的算法。 我有很多数据(基于时间戳)进入数据库。现在,我还想构建一个示例表,其中包含主数据库表中10%的记录,但是是随机的,这样,如果想要快速查询,并且我没有什么不准确的地方,我可以快速查询。 我收到的信息(数字)成批说,有时100,有时20,有时5等 我在想我会在流媒体播放的时候做这件事,这个问题表明了这一点。 有人能提出一个好的算法吗。 有更好的办法吗 简单的解决方案是只保存每10个传入数

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

更大的问题是我在考虑上面的算法。 我有很多数据(基于时间戳)进入数据库。现在,我还想构建一个示例表,其中包含主数据库表中10%的记录,但是是随机的,这样,如果想要快速查询,并且我没有什么不准确的地方,我可以快速查询。 我收到的信息(数字)成批说,有时100,有时20,有时5等

我在想我会在流媒体播放的时候做这件事,这个问题表明了这一点。 有人能提出一个好的算法吗。
有更好的办法吗

简单的解决方案是只保存每10个传入数据点,但这可能会导致偏差结果,具体取决于数据的随机性


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

以你的评论为例:

  • 数据之间没有相关性
  • 您需要在一天中的特定时间采集样本
在本例中,您可以跟踪在每个时间间隔(例如,餐厅每半小时营业)内通过的数据总数。(甚至只有一个0到9的计数器,当达到10时会重置为零。)

抓住你在每个时间间隔看到的第一个,让九个落在地板上

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

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

对于
n
连续项目的任何窗口(您选择
n>=1
),您希望项目的预期数量为
z*n
,但可能与该预期存在一些差异。为此,您可以使用(截断的)二项分布,其平均值
z*n
和标准偏差
d
(在此处选择
d>0
)。(它在右边被截断,因为当你只考虑代码< n>代码>时,你就不可能选择比<代码> N< /代码>项目更多的东西!你也可以在左边截断它来表示。“我总是希望每个
n
中至少有
m
项,其中
m
z*n
小得多,但我假设您忽略了这一点。)

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

A=P(x(i)=1 | x(i-j),1=1
d>0
  • n
    视为窗口大小
  • d
    视为从常规采样到更嘈杂采样模式的偏差量
  • n=1
    表示“以概率
    z
    包含每个项目
    i
    ,与其他项目是否包含在稀疏序列中无关
  • n=100,d=0.0001
    表示“除极少数情况外,将
    10
    从每个连续
    100
    项目中以更稀疏的顺序包括在内”
    • 如果你把
      d
      做得非常小,你基本上是说“按规则选择每个
      1/z
      th项”
  • n=100,d=5
    表示“从稀疏序列中的每个连续
    100
    项目中大致包含
    5
    15

我会确保您准确地理解流是如何“随机”的。白噪声是随机的,还是一个数字与下一个数字之间存在相关性(即使它是不可预测的)?如果存在相关性,并且您每次获取10%的100个数字,那么样本可能无法代表您想要的。这些数字没有任何关联,说它们都是客户在Restranur花费的时间。因此,我想询问在特定时间间隔之间,在Restranur花费的平均时间是多少,因为我的正常表是pretty large,我想对采样数据进行处理。一次获取10%的问题是,如果我总是在批处理中收到少于10%的消息,那么10%的消息总是会被捕获null@Peter对于一个你可以微调的数学模型,一定要看看我下面的答案。我认为它解决了你到目前为止提出的所有问题e random,你以1种方式每10个样本一次,这相当于对每一个项目单独说,“保持概率为0.1。”——“模拟一个真正随机的10%样本”有点言过其实,尽管我同意它仍然比每10个项目的常规抽样“更随机”。
A = P( x(i) = 1 | x(i - j), 1 <= j < n )