【问题标题】:How to sample from a multinomial distribution?如何从多项分布中采样?
【发布时间】:2020-04-28 23:51:19
【问题描述】:

假设我有一组概率 [0.1, 0.6, 0.2, 0.1]。我想从这组概率中采样位置。例如当我采样时,我应该比其他位置更频繁地获得位置 1。我知道我可以在 Matlab(使用命令 mnrnd)或其他语言中实现这一点。但是,我想知道算法细节。我想知道一个非常简单的算法,可以用来从多项分布中采样。

【问题讨论】:

  • 您想使用n 的什么值?没有提供足够的信息

标签: statistics probability distribution sampling multinomial


【解决方案1】:

蛮力方法

创建一个包含累积概率的数组,在您的情况下为cdf = [0.1, 0.7, 0.9, 1.0]。生成U,一个统一的(0,1)随机值。选择第一个索引,例如cdf[i] <= U。对于少数结果,这可以通过线性搜索 (O(n)) 来完成,如果结果数量很大,则可以使用二分搜索 (O(log n))。

别名方法

别名表要求您使用条件概率来构造主要元素和别名值的表,以使每个主要/别名对的总概率相同。然后,您使用一个随机数选择表中的一列(概率相等),并使用第二个值在主要和别名之间进行二项式选择。构建表后,运行时间为 O(1),这需要 O(n) 的努力。有关详细信息,请参阅Wikipedia,或有关 Ruby 实现的 rubygems。请注意,这需要每个结果有两个制服,所以这不是倒置,您不能做有趣的技巧,比如生成antithetic variates

【讨论】:

  • 但 OT 要求多项式,而不仅仅是一些通用的离散有限概率分布。不确定您的回答是否有帮助...
猜你喜欢
  • 2019-07-12
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2019-10-14
  • 2021-03-04
相关资源
最近更新 更多