Существует ли функция, аналогичная np.random.choice, с более высокой вероятностью выбора более низких значений в распределении вероятностей? - PullRequest
1 голос
/ 01 февраля 2020

У меня есть массив объектов с соответствующей вероятностью для каждого, скажем,

sample = [a, b, c, d, e, f]
probability = [0.1, 0.15, 0.6, 0.05, 0.03, 0.07]

Для большинства функций в моем классе это идеально подходит для использования с np.random.choice, так как я хочу выбрать значения с наибольшим процентным шансом.

Однако для одной из функций мне нужно, чтобы она была смещена к значениям с меньшей вероятностью (то есть с большей вероятностью выберет e и d в выборке, чем c).

Есть ли функция, которая может сделать это, или мне нужно рассмотреть возможность преобразования вероятности в некоторую обратную вероятность, такую ​​как

inverse_probability = [(1-x) for x in probability]
inverse_probability = [x/sum(inverse_probability) for x in probability]

, и затем использовать это в функции np.random.choice?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Это простое решение, но оно должно решить вашу проблему:

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)
0 голосов
/ 01 февраля 2020

Я полагаю, вы можете использовать дистрибутив Пуассона:

from numpy.random import poisson
index = poisson()
return sample[min(len(sample, index)]

См. Википедия для получения более подробной информации об этом распределении.

Примечание. Это действительно только в том случае, если вы У меня нет требований к определению приоритетов.

...