问题描述
所以手头的问题是我在带有计数器的字典中有一些值,比方说
dict = {"cats":0,"dogs":0,"lions":0}
我想从这个字典中随机选择键,并在我选择特定键时递增计数器。
但是当我选择键并增加这些键的计数器时,我希望选择概率更高的键的计数器值小于其他键。
我在下面的回答中实现了这个想法。请让我知道这是否有意义以及是否有更好的方法来做到这一点?
解决方法
有许多方法可以解决这个问题,但作为替代方案,我很想将概率计算为:
def iweight(k,*,alpha=1):
p = 1/(alpha + np.array(k))
return p / np.sum(p)
可以用作:
counts = [0,20]
for _ in range(20):
i = np.random.choice(len(counts),p=iweight(counts))
print(i)
counts[i] += 1
alpha
与 Dirichlet process 互补使用:较小的值会使其更喜欢从较小的计数中绘制值,而较大的值会使其更加统一。
什么是最好的取决于您建模的过程,例如小计数应该比中等计数优先多少,应该选择最大的计数,等等。这完全取决于您所追求的分布,并且统计文献应该有许多关于如何开始思考这个问题的例子。