Вероятность k выигрывает из n, учитывая p? - PullRequest
0 голосов
/ 25 мая 2019

Учитывая n испытаний, с вероятностью p выигрыша каждого испытания, какова вероятность выигрыша r или более испытаний?

Мое мышление выглядит следующим образом: Каждая комбинация выигрышей и проигрышей имеет вероятность p ^ w * (p-1) ^ (n-w), где w - количество выигрышей.

Каждое количество выигрышей может происходить в комбинациях nCr, напр. выигрыш 2 из 3 раз означает, что вы можете проиграть первый, второй или третий раз, например, три комбинации.

Таким образом, вероятность выигрыша 2 из 3 раз равна 3C2 * p ^ 2 * (1-p) ^ 1. Вероятность выигрыша 2 или более раз является суммой этого расчета для 2 и 3 побед.

У меня есть следующий код:

import math

def nCr(n,r):
    f = math.factorial
    return f(n) / f(r) / f(n-r)

def prob_at_least(n, r, p):
    probs = [nCr(n,k)*pow(p,k)*pow(1.0-p,n-k) for k in range(r, n+1)]
    return sum(probs)

Этот код работает, но есть ли встроенная функция или более короткий путь для достижения того же?

Ответы [ 2 ]

2 голосов
/ 25 мая 2019

Из модуля scipy.stats вы можете использовать binom.

>>> import scipy.stats as scs
>>> print(scs.binom.pmf(2, 5, .5))
0.3125

Редактировать: чтобы получить r или больше:

>>> trials = 0
>>> n = 5
>>> r = 2
>>> p = .5
>>> for i in range(r):
    trials += scs.binom.pmf(i, n, p)
 r_or_more = 1 - trials

Редактировать: решение, данное ljeabmreosn, дает кумулятивную функцию распределения, которая не требует моего цикла.

1 голос
/ 25 мая 2019

Есть гораздо более быстрые способы реализации комбинаций :

import operator as op
from functools import reduce

def nCr(n, r):
    r = min(r, n-r)
    numerator = reduce(op.mul, range(n, n-r, -1), 1)
    denominator = reduce(op.mul, range(1, r+1), 1)
    return numerator / denominator

Но если вы делаете это много, вы можете рассмотреть такой пакет, как scipy, который имеет special.comb для эффективного расчета комбинации

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