Функция вероятности в Python
По умолчанию в этом языке программирования не предусмотрена работа с вероятностными распределениями. Поэтому первым делом импортируем нужные функции из библиотеки SciPy.
# Импортируем в Python статистические функции.
from scipy import stats.
Для каждого распределения, в SciPy есть своё обозначение:
- randint(a, b + 1) — U([a, b]);
- bernoulli(p) — Bernoulli(p);
- binom(n, p) — Binom(n, p);
- geom(p) — Geometric(p);
- poisson(mu) — Poisson(μ).
Эти распределения как раз и находятся в импортированном модуле stats. Например, распределение Бернулли в Python определяется как stats.bernoulli(p).
Пример№ 1
Пятеро друзей отдельно и независимо друг от друга решают, чем заняться завтра вечером:
- пойти на вечеринку;
- пойти в паб смотреть хоккей;
- сидеть дома и грустить.
Каждый из друзей настолько не знает, чего хочет, что принимает решение наугад: описывает активности на бумажках и не глядя вытягивает одну.
Выведите вероятность, что только два друга встретятся завтра вечером в пабе.
Код:
from scipy import stats
n=5
p= 1/3
X = stats.binom(n, p)
x = 1
p = X.pmf(x)
print(p) # Сохраняем полученную вероятность в переменной p.
Результат: 0.3292181069958849.
В задаче нас интересует только решение по бару, каждый из друзей может или выбрать бар, или не выбрать — всего два исхода. Случайная величина, которая опишет количество друзей в баре — это сумма случайных величин, описывающих решение каждого из друзей.
Биноминальное распределение - это распределение вероятностей возможных чисел появления события А при n независимых испытаниях, в каждом из которых событие А может осуществиться с одной и той же вероятностью Р (А)= р = const. Кроме события А может произойти также противоположное событие Ā, вероятность которого Р (Ā)= 1 - р = q.
Чтобы вычислить вероятность значения X, то есть применить к значению функцию вероятности, нужен метод pmf(x). Это сокращение от английского probability mass function.
Функция вероятности в теории вероятностей — функция, возвращающая вероятность того, что дискретная случайная величина X примет определённое значение.
Пример№ 2
Костя — специалист по обеспечению качества продукции на производстве
ЖК-дисплеев. Он подсчитал, что в среднем 1 из 1000 дисплеев бракованный.
Выведите вероятность того, что при последовательной проверке деталей Костя встретит брак не раньше, чем на 501 проверке. Результат сохраните в переменной result.
Код:
from scipy import stats
p = 0.001
X = stats.geom(p)
# Зададим интересующее значение x.
x =500
# Сохраним результат в переменную F.
F = X.cdf(x)
result =1-F
# Выведем результат на экран.
print(result)
Результат: 0.606378944861185
Проверка дисплея — это испытание Бернулли. Последовательность проверок независимых друг от друга дисплеев — это серия испытаний Бернулли. Тогда номер проверки, на котором впервые встретится брак, подчиняется геометрическому распределению.
Под геометрическим распределением в теории вероятностей подразумевают одно из двух распределений дискретной случайной величины:
распределение вероятностей случайной величины X равной номеру первого «успеха» в серии испытаний Бернулли и принимающей значения n=1,2,3,...;
распределение вероятностей случайной величины Y=X-1 равной числу «неудач» до первого «успеха» и принимающей значения n=0,1,2,... .
Чтобы посчитать значение функции распределения, к случайной величине применяют метод cdf(x) — от английского cumulative distribution function.
функция распределения дискретной случайной величины X. Она определяет вероятность того, что X примет значение, не большее произвольного действительного числа x.
Пример№ 3
Среднее количество голов в любом матче чемпионата мира по футболу равно 2.5.
Считая, что это количество подчиняется распределению Пуассона, выведите список вероятностей для каждого возможного количества голов от 0 до 4 включительно.
Код:
from scipy import stats
import numpy as np
mu = 2.5
X = stats.poisson(mu)
x = np.array([0, 1, 2, 3, 4])
result = X.pmf(x)
print(result) # Сохраним полученный ответ в переменную result.
Результат
[0.082085 0.2052125 0.25651562 0.21376302 0.13360189]
Количество забитых мячей подчиняется распределению Пуассона с параметром μ=2.5. Остаётся применить соответствующую функцию вероятности для списка возможных значений количества голов.
Распределение Пуассона — распределение дискретного типа случайной величины, представляющей собой число событий, произошедших за фиксированное время, при условии, что данные события происходят с некоторой фиксированной средней интенсивностью и независимо друг от друга.
До этого момента мы делали так: брали одно значение, подавали его на вход функции вероятности и распределения и получали на выходе соответствующую вероятность.
Но библиотека NumPy позволяет работать и с несколькими числами одновременно. Можно создать список значений и передать его функциям из SciPy. Функция применится покомпонентно, то есть к каждому значению по очереди. И мы получим новый список с результатами.
Для того чтобы , библиотеки numpy и SciPy заработали необходимо установить их сначала , командой pip install numpy и pip install SciPy, и убедитесь, что используете последнюю версию Python. Команды необходимо вводить в cmd.exe.
В других ОС, существуют подобные командные строки, я работаю в операционной системе Windows.
Чтобы запустить этот код в среде разработки Python нужно в меню выбрать пункт File->New File, в появившемся окне набрать код или скопировать его туда, проверить ошибки, в меню появившегося окна выбрать Run->Run Module, программа выполнится.
Вот-так, относительно просто можно найти вероятности для приведенных выше распределений в языке программирования Python.
Маленькая просьба, поставить лайк в Дзене, если Вам понравилась публикация и подписаться, это поможет развитию канала: https://dzen.ru/id/5f572502b7204709f04ab67c