В чем разница между параметрами и формой биномиального распределения Numpy? - PullRequest
0 голосов
/ 09 сентября 2018

Я работаю над проектом, выполняющим некоторую байсейскую статистику в Python, и использую функцию Numpy Random Binomial. Однако, вводя ключевое слово аргументы / параметры, я немного путаюсь с некоторыми основными теориями, стоящими за этим. Моя установка следующая:

trial = np.random.binomial(n, .10, 1)

(где n = 1000)

Проблема: Скажем, вы подбрасываете смещенную монету (p = .10).

Вопрос: Есть ли разница между 1000 бросками с вероятностью 0,10, выполненными один раз, или 1 броском с вероятностью 0,10, выполненными 1000 раз? Что предпочтительнее? Является ли один вычислительно более эффективным, чем другой?

т. в чем, если есть, разница между:

np.random.binomial(1000, .10, 1)

и

np.random.binomial(1, .10, 1000)

Или, сформулированный по-другому, в чем разница между параметрами распределения и формы?

Я прочитал найденные Numpy Binomial Docs здесь

Если бы кто-то мог объяснить теорию или основную интуицию, стоящую за этим, это было бы очень полезно!

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Когда результатом одного случайного испытания является «успех» с вероятностью p, мы называем это испытание Бернулли с параметром p, a.k.a. Бернулли (p). Биномиальное распределение оценивает вероятность получения определенного числа «успехов», если мы запустим n независимых испытаний Бернулли с тем же p. Мы называем это биномиальным распределением с параметрами n и p, a.k.a. биномиальным (n, p). По соглашению успехи Бернулли кодируются как 1, а неудачи - как 0. Следовательно, Бернулли (p) и бином (1, p) - это одно и то же.

Если мы генерируем значения из бинома (n, p), результатом будет подсчет того, сколько успехов было обнаружено при реализации n испытаний. Таким образом, число успехов является суммой результатов n Бернулли.

Теперь к NumPy. Вызов np.random.binomial(1000, .10, 1) генерирует одну реализацию бинома с n = 1000 и p = 0.1. Использование np.random.binomial(1, .10, 1000) создает 1000 реализаций бинома с n = 1 и p = 0,1, то есть 1000 Бернулли (0,1). Это не одно и то же, но если вы суммируете значения Бернулли, используя sum(np.random.binomial(1, .10, 1000)), результат будет иметь то же распределение, что и np.random.binomial(1000, .10, 1).

Один из них лучше другого? Хотя они взаимозаменяемы с точки зрения распределения, существуют более эффективные вычислительные методы для генерации биномов , чем просто генерирование n Бернулли и их суммирование. Предполагая, что разработчики NumPy компетентны, вам, вероятно, лучше использовать np.random.binomial(1000, .10, 1).

0 голосов
/ 09 сентября 2018

С учетом этого примера

In [51]: for i in range(10): print (np.random.binomial(10, 0.3))
2
3
5
2
4
2
5
3
1
2

Эквивалентно сказать: если р = 0,3 и n = 10; то есть смещенная монета с приманкой (0,3 шанса получить голову) и количество попыток равно 10, сколько раз из 10 я получу голову? Конечно, это не будет ровно 3 все время (и на самом деле вы можете даже 10 голов из 10 бросков, хотя и с очень малой вероятностью), как это демонстрируется здесь, выполняя его в цикле 10 раз.

Однако в NumPy мы часто не будем запускать вещи в цикле. Если мы хотим сгенерировать 10 таких чисел, мы можем предоставить дополнительный параметр размера для вызова

In [53]: np.random.binomial(10, 0.3, size=10)
Out[53]: array([3, 5, 4, 1, 2, 3, 2, 3, 3, 4])
...