如何在python中对类别进行加权随机抽样
||
给定一个元组列表,其中每个元组都包含一个概率和一个项目,我想根据一个项目的概率对其进行采样。例如,给列表[(.3,\'a \'),(.4,\'b \'),(.3,\'c \')]我想对\'b进行采样40%的时间。
在python中执行此操作的规范方法是什么?
我看了看似没有合适函数的随机模块,看了numpy.random,尽管它具有多项式函数,但似乎并没有以很好的形式返回结果。我基本上是在Matlab中寻找mnrnd之类的东西。
非常感谢。
非常感谢您的所有答复。为了澄清,我不是在寻找有关如何编写采样方案的解释,而是要指出一种简单的方法,该方法是从给定一组对象和权重的多项式分布中采样,或者被告知没有此类函数存在于标准库中,因此应该自己编写。
没有找到相关结果
已邀请:
9 个回复
荤碗
您想如何准确地收到结果?
际恃啸称桅
喷乡顾沥沪
拟僚疽刊剔
必须注意即使返回值的概率为0的方法。幸运的是,此方法不会,但是以防万一,可以插入
。 记录下来,这是一种骇人听闻的方法:
但是,如果您没有解决问题的方法,那么实际上这可能是最快的方法。 =)
际恃啸称桅
臀夯脖锑
输入指定为“ 7”,大小是您需要的样本数量。
莽缓逢
其中k是您想要的样本数。 对于更可靠的方法,请根据累积概率将单位间隔分为两部分,并使用random.random()从均匀分布(0,1)中提取。在这种情况下,子间隔为(0,.3)(。3,.7)(。7,1)。您可以根据元素所属的子间隔来选择元素。
娜拐赐巫潭
更新: 根据
的反馈,事实证明可以基于implemented12 implemented实现更直接的解决方案,例如:
恕我直言,我们对基于ѭ14和
的采样有一个很好的总结,得出相似的结果。因此,在总结中,选择最适合您目的的一个。
纫合峭
这类似于@eat的答案。