从另一个概率分布 P(x) 生成概率分布 P(y),使得 P(x) 中的最高概率最不可能出现在 P(y) 中
Generating a probability distribution P(y) from another probability distribution P(x) such that highest probability in P(x) is least likely in P(y)
所以手头的问题是我在带有计数器的字典中有一些值,比方说
dict = {"cats":0, "dogs":0, "lions":0}
我想从这个字典中随机 select 键并在 select 特定键时增加计数器。
但是当我 select 键并增加这些键的计数器时,我希望 selection 的概率高于计数器值小于其他键的键。
我在下面的回答中实现了这个想法。请告诉我这是否有意义,是否有更好的方法?
有 许多 方法可以解决这个问题,但作为替代方案,我很想计算概率为:
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
与 Dirichlet process 互补:小值会导致它更喜欢从小计数中提取值,而大值会使它更均匀。
什么是最好的将取决于您建模的过程,例如应该选择多少小计数而不是中等计数,是否应该选择最大计数等等。这完全取决于你所追求的分布,统计文献应该有很多关于如何开始考虑这个问题的例子。
所以手头的问题是我在带有计数器的字典中有一些值,比方说
dict = {"cats":0, "dogs":0, "lions":0}
我想从这个字典中随机 select 键并在 select 特定键时增加计数器。
但是当我 select 键并增加这些键的计数器时,我希望 selection 的概率高于计数器值小于其他键的键。
我在下面的回答中实现了这个想法。请告诉我这是否有意义,是否有更好的方法?
有 许多 方法可以解决这个问题,但作为替代方案,我很想计算概率为:
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
与 Dirichlet process 互补:小值会导致它更喜欢从小计数中提取值,而大值会使它更均匀。
什么是最好的将取决于您建模的过程,例如应该选择多少小计数而不是中等计数,是否应该选择最大计数等等。这完全取决于你所追求的分布,统计文献应该有很多关于如何开始考虑这个问题的例子。