首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从多项分布中抽样?

如何从多项分布中抽样?
EN

Stack Overflow用户
提问于 2020-01-12 01:16:03
回答 1查看 1.2K关注 0票数 1

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

EN

回答 1

Stack Overflow用户

发布于 2020-01-12 02:42:06

蛮力方法

创建一个包含累积概率的数组,在本例中为cdf = [0.1, 0.7, 0.9, 1.0]。生成U,一个均匀的(0,1)随机值。选择第一个索引,以便cdf[i] <= U。对于少量的结果,这可以通过线性搜索(O(n))来实现,或者如果结果的数量很大,则可以使用二进制搜索(O(log ))。

别名方法

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59696759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档