有没有类似np.random.choice的函数,在概率分布中选择越低的值概率越高?
Is there a function similar to np.random.choice that has a higher probability of choosing the lower values in the probability distribution?
我有一个对象数组,每个对象都有相应的概率,比方说
sample = [a, b, c, d, e, f]
probability = [0.1, 0.15, 0.6, 0.05, 0.03, 0.07]
对于我 class 中的大多数函数,这非常适合与 np.random.choice 一起使用,因为我想 select 具有最高百分比机会的值。
虽然在其中一个函数上,我需要它偏向于概率较低的值(即比 c 更有可能在样本中选择 e 和 d)。
是否有可以执行此操作的函数,或者我是否需要考虑将概率转换为某种逆概率,例如
inverse_probability = [(1-x) for x in probability]
inverse_probability = [x/sum(inverse_probability) for x in probability]
然后在np.random.choice函数中使用这个?
提前致谢!
我相信你可以使用泊松分布:
from numpy.random import poisson
index = poisson()
return sample[min(len(sample, index)]
有关此分布的更多详细信息,请参阅 Wikipedia。
注意:仅当您对如何进行优先级排序没有任何要求时,这才有效。
这是一个简单的解决方案,但应该可以解决您的问题:
sample = ['a', 'b', 'c', 'd', 'e', 'f']
probability = [0.1, 0.15, 0.6, 0.05, 0.03, 0.07]
np.random.choice(a=sample, p=probability)
解决方案 1:
inverse_probability = [(1-x) for x in probability]
inverse_probability = [x/sum(inverse_probability) for x in inverse_probability]
np.random.choice(a=sample, p=inverse_probability)
解决方案 2:
inverse_probability = [1/x for x in probability]
inverse_probability = [x/sum(inverse_probability) for x in inverse_probability]
np.random.choice(a=sample, p=inverse_probability)
我有一个对象数组,每个对象都有相应的概率,比方说
sample = [a, b, c, d, e, f]
probability = [0.1, 0.15, 0.6, 0.05, 0.03, 0.07]
对于我 class 中的大多数函数,这非常适合与 np.random.choice 一起使用,因为我想 select 具有最高百分比机会的值。
虽然在其中一个函数上,我需要它偏向于概率较低的值(即比 c 更有可能在样本中选择 e 和 d)。
是否有可以执行此操作的函数,或者我是否需要考虑将概率转换为某种逆概率,例如
inverse_probability = [(1-x) for x in probability]
inverse_probability = [x/sum(inverse_probability) for x in probability]
然后在np.random.choice函数中使用这个?
提前致谢!
我相信你可以使用泊松分布:
from numpy.random import poisson
index = poisson()
return sample[min(len(sample, index)]
有关此分布的更多详细信息,请参阅 Wikipedia。
注意:仅当您对如何进行优先级排序没有任何要求时,这才有效。
这是一个简单的解决方案,但应该可以解决您的问题:
sample = ['a', 'b', 'c', 'd', 'e', 'f']
probability = [0.1, 0.15, 0.6, 0.05, 0.03, 0.07]
np.random.choice(a=sample, p=probability)
解决方案 1:
inverse_probability = [(1-x) for x in probability]
inverse_probability = [x/sum(inverse_probability) for x in inverse_probability]
np.random.choice(a=sample, p=inverse_probability)
解决方案 2:
inverse_probability = [1/x for x in probability]
inverse_probability = [x/sum(inverse_probability) for x in inverse_probability]
np.random.choice(a=sample, p=inverse_probability)