Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Statistics 从长度未知的流中随机抽样_Statistics_Probability - Fatal编程技术网

Statistics 从长度未知的流中随机抽样

Statistics 从长度未知的流中随机抽样,statistics,probability,Statistics,Probability,假设我需要从N>>K个元素的实时流中随机抽取K个元素,其中我只有有限的内存,并且事先不知道N。是否有一种算法在理论上是合理的,也就是说,符合从采集中随机抽取样本的技术含义 我知道有一种算法可以满足随机抽样的一些直觉,但问题是,它在形式上合理吗 换句话说,我如何证明我提出的算法在这样的环境下确实产生了一个随机样本 例如,如果我可以证明我的算法生成了K个元素,其中流外的每个元素都以K/N的概率包含,那么这是合法的证明吗 有相应的算法,请参见 是的,您需要证明您的样本具有统一的概率(并且您可能希望它们

假设我需要从N>>K个元素的实时流中随机抽取K个元素,其中我只有有限的内存,并且事先不知道N。是否有一种算法在理论上是合理的,也就是说,符合从采集中随机抽取样本的技术含义

我知道有一种算法可以满足随机抽样的一些直觉,但问题是,它在形式上合理吗

换句话说,我如何证明我提出的算法在这样的环境下确实产生了一个随机样本


例如,如果我可以证明我的算法生成了K个元素,其中流外的每个元素都以K/N的概率包含,那么这是合法的证明吗

有相应的算法,请参见


是的,您需要证明您的样本具有统一的概率(并且您可能希望它们也是独立的)。这正是链接页面中算法R的证明所做的。

我们需要样本k元素

  • 对于流中的前k个数据(第1到第k个),我们将保留它

  • 对于下面的第i个元素(i>k),我们将有一些概率p来选择它或不选择它。另外,当我们选择保留新的第i个元素时,我们需要从以前的k数据中剔除一个元素。那么我们有以下公式:

  • $k/i(1-p/k)=p$

    解释:左边的大小,k/i是流中第一个i元素的概率。(1-p/k)是每个元素不会被踢出的概率。因此,乘法将表示每个元素(从第1个到第i个)被存储的概率,这应该等于p,这是我们保持i+1个元素的概率


    求解这个方程后,我们得到p=k/(1+N),这是我们保留新数据的概率。1/1+N是我们将原始k中的数据踢出的概率。

    你想统一采样还是元素以不同的概率采样可以?我想取一个“简单随机样本”(统一)。我的问题不是找到算法,但是一个元理论问题,关于是否有可能正式证明这种设置的算法确实会产生一个随机样本。它确实回答了你的第一个问题,关于是否会有这样的算法。我更新了它以解决另一个问题,这将提供缓冲区的统一采样,而不是K元素。