Как «инвертировать» частоту и сохранить ее распределение вероятностей? - PullRequest
0 голосов
/ 27 октября 2019

Допустим, у меня есть список частот.

class 1 => 9
class 2 => 5
class 3 => 6
class 4 => 100

Преобразовать их в вероятность, где сумма = # общего вхождения
0,075, 0,0417, 0,05, 0,83

ПредполагаяЕсть 500 классов, моя цель состоит в том, чтобы выбрать n чисел, скажем 20, из этих 500 классов случайным образом с вероятностью, не пропорциональной его частоте.

Итак, я хочу, чтобы класс 1 (частота = 9) имел большевероятность быть выбранным, чем класс 2 (частота 5) и класс 3 (частота 6), но меньше, чем класс 4 (частота 100). Та же логика применима и к остальным классам.

Кроме того, я хочу, чтобы вероятность того, что эти классы выбраны, пропорциональна друг другу. Класс 4 (83%) примерно в 11 раз более вероятен, чем класс 1 (7,5%). Опять же, та же логика применима и к остальным классам.

Возвращаясь к тому, с чем я на самом деле имею дело, у меня около 3000 классов, и около 95 процентов из них имеют частоту около 0,1%. и немногие 5 процентов говорят, что 40% 20% 3%. (диапазон довольно большой среди этих 5 процентов, и даже самый маленький из этой группы все еще значительно больше, чем другие 95 процентов). В дополнение к этому мне нужно выбрать один из

. По этой причине я не могу по-настоящему использовать метод Монте-Карло, где я выбираю порог и выбираю класс, когда сгенерированное случайное число выше, чем вероятность класса.

Мой друг предлагает, чтобы мы вычли это число из 1. Таким образом, вероятность того, что вас выберут с меньшей вероятностью, вышеа потому что вероятность 95 процентов очень низкая. Поступая так, как подсказывает мой друг, почти гарантирую, что каждый член 95-процентной группы будет выбран почти с уверенностью.

1 Ответ

0 голосов
/ 28 октября 2019

Это грубо, но вы могли бы сделать это:

a = random.random()

if (a < 0.075) 
    print('1')

if (a >= 0.075 && a < 0.075 + 0.0417):
    print('2')

#etc...

Преобразовать вероятности в список переменных и выполнить цикл по ним. Затем сделайте это 20 раз. Будет ли это работать?

...