我想根据简单的分类概率分布生成样本,例如
p(A) = 0.1
p(B) = 0.5
p(C) = 0.25
p(D) = 0.15
使用rand(),它在(0,1)中统一生成样本,实现这个目的的最佳方法是什么?
答案 0 :(得分:3)
您可以检查随机数是否小于每个类别的概率,按概率增加的顺序:
value = rand()
if value < p(A)
return A
if value < p(A)+p(B)
return B
if value < p(A)+p(B)+P(C)
return C
else
return D
我不能真正告诉你在不了解你的代码的情况下让它们按顺序排列的最好方法。如果你只有少数案例不会改变,那么它可能会最简单的就是用手工硬编码,就像我上面做的那样。
编辑:现在我想到了,因为我们正在积累概率,所以它们的顺序并不重要。我已经相应地调整了我的代码。
修改编辑:我认为这基本上是randsample的工作方式。