Как получить случайную выборку из категориального распределения с помощью Matlab's rand ()? - PullRequest
0 голосов
/ 18 августа 2011

Я хочу генерировать выборки в соответствии с простым категориальным распределением вероятностей, например,

p(A) = 0.1
p(B) = 0.5
p(C) = 0.25
p(D) = 0.15

Используя rand (), который равномерно генерирует сэмплы в (0,1), как лучше всего это сделать?

1 Ответ

3 голосов
/ 18 августа 2011

Вы можете просто проверить, меньше ли случайное число, чем вероятность каждой категории, в порядке увеличения вероятности :

value = rand()
if value < p(A) 
    return A
if value < p(A)+p(B) 
    return B
if value < p(A)+p(B)+P(C) 
    return C
else            
    return D

Я не могу сказать вам лучший способ привести их в порядок, не зная больше о вашем коде. Если у вас есть только небольшое количество случаев, которые не будут меняться, это может быть проще всего один раз жестко закодировать его вручную, как я делал выше.

Редактировать: теперь, когда я думаю об этом, так как мы накапливаем вероятности, на самом деле не имеет значения, в каком порядке они находятся. Я соответственно скорректировал свой код.

Редактировать: думаю, именно так и работает randsample .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...