预期有多少次,我从元素的预定义离散概率分布中获取随机样本?

机器算法验证 采样 期望值 随机生成 优惠券收集问题
2022-04-10 15:01:51

作为我正在进行的模拟的一部分,我有一个概率分布n元素,我必须从中采样一 S 大小的m. 也就是说,每个元素 eS必须是唯一的 [1]。

从概念上讲,我有以下代码:

while(S.size < m)
   getNextSampleFromDistribution();

如果集合中已经存在一个元素S,我只是取另一个样本。也就是说,我不断从分布中反复采样,直到集合中填充m元素。

在预期中,调用了多少次getNextSampleFromDistribution()我该如何计算呢?

有人建议下一个有效样本的到来,可以建模为泊松过程,它们之间的等待时间是指数的,因此可以归类为指数分布,其中E[calls to getNext...]=1/λ. 如果是真的,那是什么λ在这种情况下?如果不是,那么如何最好地提出一个强有力的理论期望值来解释这一点?

对于我为从超过 1000 个数字的概率分布生成一组 500 个元素而运行的模拟,while 循环运行接近20,000在某些情况下有时!

[1] - 如果我说“设置”,这是多余的,但如果有人忽略了这一点,仍然要清楚:)

1个回答

这个问题与优惠券收集器问题有关,但它是您只需要的问题mn元素。

下一次成功的调用次数不是泊松而是几何,并且p因为每次成功都会发生几何变化(因为达到已经获得的值的机会会增加)。这里的“成功”是“获得我们还没有的元素”。

给定下一次成功前的预期试验次数k迄今为止的成功,是nnk

所以当k= 0,它是 1 - 你立即获得成功。

那么当k=1,你期望nn1尝试直到下一次成功,依此类推。

所以预期的试验次数直到m成功是

n[1n+1n1+1n2++1nm]

=n(HnHnm1) (Hn是个nth谐波数)。

自从limn(Hnlnn)=γ不太小的合理近似值,这表明您平均预期会超过 695 次试验......但分布有点歪斜,所以有时可能需要更长的时间。nmn(log(n)log(nm1))

(我不确定你是如何获得 20000 的,但是,如果 m=500 且 n=1000,则获得最后一个的预期试验次数仅为 2 次左右,并且平均每个较早的试验都更短。 )