从另一个概率分布 P(x) 生成概率分布 P(y),使得 P(x) 中的最高概率在 P(y)

问题描述

所以手头的问题是我在带有计数器的字典中有一些值,比方说

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

alphaDirichlet process 互补使用:较小的值会使其更喜欢从较小的计数中绘制值,而较大的值会使其更加统一。

什么是最好的取决于您建模的过程,例如小计数应该比中等计数优先多少,应该选择最大的计数,等等。这完全取决于您所追求的分布,并且统计文献应该有许多关于如何开始思考这个问题的例子。