理解随机数生成器的泊松分布

6
我正在使用C++11中可用的随机数生成器。目前,我正在使用均匀分布,这应该使我在指定的范围A和B内获得任何数字的概率相等。
然而,我对生成泊松分布感到困惑。虽然我了解如何确定泊松概率,但我不明白如何基于泊松分布“分布”随机一系列数字。
例如,C++11中泊松分布的构造函数需要一个参数--λ,它是分布的平均值
std::tr1::poisson_distribution<double> poisson(7.0);
std::cout << poisson(eng) << std::endl;

在泊松分布概率问题中,这个值等于在给定时间间隔内预期的成功/事件发生次数。然而,在这种情况下,我不明白它代表什么意思。在随机数场景中,“成功”/“事件发生”是什么意思?
我感激任何能帮助我理解这一点的协助或参考资料。

这里的问题可能部分在于我并不完全理解泊松分布的目的。我的统计/概率教材讨论了确定泊松概率,但没有提供有关在泊松分布内生成数字的任何信息。目前我没有实际应用...我只是很好奇这是如何工作的。 - BSchlinker
1
一个示例实现可以计算每个值出现的概率,然后根据这些值计算范围,将均匀分布转换为泊松分布。例如,对于λ == 2,我们有13%的机会得到0,27%的机会得到1,27%的机会得到2... 然后我们生成一个好老的0.0到1.0之间的均匀随机数。如果这个数字小于等于0.13,则返回0。如果它小于等于0.40,则返回1。如果它小于等于0.67,则返回2等等... - oddstar
1个回答

3
泊松分布的概率是特定值出现的机会。想象一下,你想计算每天有多少辆汽车经过某个点。这个值有时会更多,但有时会更少。但是当在一段时间内跟踪此值时,将出现平均值,并且在其附近的值更经常发生,而偏离平均值(每天0辆车或十倍数量)的值则不太可能出现。λ就是那个出现的平均值。
将此反映到随机数生成器中,算法将返回在随机选择的某一天经过的汽车数量(该算法是均匀选择的)。正如您可以想象的那样,平均值λ更有可能出现,而极端情况最不可能出现。
以下链接显示了泊松分布的示例,显示了您获取的离散结果以及它们发生的机会:

http://www.mathworks.com/help/toolbox/stats/brn2ivz-127.html

一个示例实现可以计算每个值出现的概率,然后基于这些值计算范围,将均匀分布转换为泊松分布。例如,对于 λ == 2,我们有13%的机会得到0,27%的机会得到1,27%的机会得到2……然后我们生成一个在0.0和1.0之间的好老的均匀随机数。如果这个数字是小于等于0.13,则返回0。如果它是小于等于0.40,则返回1。如果它是小于等于0.67,则返回2等等......

好的--这与我预期的相似。然而,是什么决定了输出数字的“范围”?例如,如果平均值为75,我们可以有两个数字,比如50和150,或74和76。这两者的平均值都是75,但50到150之间的范围显着更大。此外,是什么决定了需要多少样本才能开始出现平均值? - BSchlinker
50和150的出现概率比74和76低得多。虽然它们的范围平均值为75,但您应该单独查看数字及其与平均值的关系。也就是说,在实验中它们出现的可能性有多高?50辆车在一天内通过的概率有多高,或者150辆车通过的概率与74或76辆车通过的概率相比有多高。不要将平均值与平均数混淆。平均值是所有结果“中间”的数字,而不是所有输出的平均值。 - oddstar
关于需要多少样本才能出现平均值,这取决于平均值,因为这是一个离散分布。例如,如果您的平均值为2,则会更快地发生(27%的机率随机数返回2),而当您的平均值为1050时(1.2%的机率随机数返回1050)则会慢得多。对于λ为75,75出现的概率约为4%。 - oddstar
感谢 oddstar 提供的所有帮助——您在评论中提供的“示例实现”确实为我澄清了一切。我在脑海中缺少这个链接——尽管也许对我来说应该很明显。 - BSchlinker
我本应该从一开始就明白这是最清晰的,但无论如何...很高兴它让你看到了光明 ;) - oddstar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接