所以手头的问题是我在带有计数器的字典中有一些值,比方说
dict = {"cats":0, "dogs":0, "lions":0}
我想从这个字典中随机选择键,并在选择特定键时增加计数器。
但是当我选择键并增加这些键的计数器时,我希望选择的概率高于计数器值小于其他键的键。
我在下面的回答中实现了这个想法。请让我知道这是否有意义以及是否有更好的方法来做到这一点?
所以手头的问题是我在带有计数器的字典中有一些值,比方说
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, 0, 0, 20]
for _ in range(20):
i = np.random.choice(len(counts), p=iweight(counts))
print(i)
counts[i] += 1
以与狄利克雷过程互补的alpha
方式使用:小值将使其更喜欢从小计数中提取值,而大值将使其更均匀。
什么是最好的取决于您正在建模的过程,例如,小计数应该比中等计数优先多少,是否应该选择最大计数等等。这一切都取决于您所追求的分布和统计文献应该有许多例子说明了如何开始思考这个问题。