• Глава 1. ЛИНЕЙНАЯ АЛГЕБРА
  • Глава 2. ВЕРОЯТНОСТЬ И СТАТИСТИКА
  • Глава 3. МАТЕМАТИЧЕСКИЙ АНАЛИЗ (CALCULUS)
  • Глава 4. ОПТИМИЗАЦИЯ
  • Глава 5. РЕГРЕССИЯ
  • Глава 6. НЕЙРОННЫЕ СЕТИ
  • Глава 7. КЛАСТЕРИЗАЦИЯ
  • Глава 8. ПОНИЖЕНИЕ РАЗМЕРНОСТИ
  • Глава 9. РАСПРЕДЕЛЕНИЯ ВЕРОЯТНОСТЕЙ
  • Глава 10. ОБУЧЕНИЕ С ПОДКРЕПЛЕНИЕМ

Глава 9. РАСПРЕДЕЛЕНИЯ ВЕРОЯТНОСТЕЙ

9.1. Распределение Бернулли

P(X=x)=px(1p)1x,x{0,1},0p1

Объяснение: Распределение Бернулли моделирует одно бинарное событие (испытание) с вероятностью успеха p.

Пример: Для p=0.7, P(X=1)=0.7, P(X=0)=10.7=0.3.

Реализация (используя scipy.stats):


from scipy.stats import bernoulli

p_success = 0.7
# Вычисление P(X=1)
prob_1 = bernoulli.pmf(k=1, p=p_success)
# Вычисление P(X=0)
prob_0 = bernoulli.pmf(k=0, p=p_success)

print(f"P(X=1) for p={p_success}: {prob_1}")
print(f"P(X=0) for p={p_success}: {prob_0}")

9.2. Биномиальное распределение

P(X=k)=(nk)pk(1p)nk,k{0,1,,n} (где (nk)=n!k!(nk)! - биномиальный коэффициент)

Объяснение: Биномиальное распределение моделирует количество успехов в n независимых испытаниях Бернулли с вероятностью успеха p в каждом.

Пример: Для n=5 и p=0.5, вычисление P(X=3). P(X=3)=(53)(0.5)3(10.5)53=5!3!2!(0.5)3(0.5)2=100.1250.25=0.3125.

Реализация (используя scipy.stats):


from scipy.stats import binom

n_trials = 5
p_success = 0.5
k_successes = 3

prob_k = binom.pmf(k=k_successes, n=n_trials, p=p_success)
print(f"P(X={k_successes}) for n={n_trials}, p={p_success}: {prob_k}")

9.3. Распределение Пуассона

P(X=k)=λkeλk!,k{0,1,2,} (где λ>0 - средняя интенсивность (rate) событий)

Объяснение: Распределение Пуассона моделирует количество событий, происходящих в фиксированном интервале времени или пространства, со средней интенсивностью λ.

Пример: Для λ=3, вычисление P(X=2). P(X=2)=32e32!=9e329×0.049820.224.

Реализация (используя scipy.stats):


from scipy.stats import poisson

lambda_rate = 3
k_events = 2

prob_k = poisson.pmf(k=k_events, mu=lambda_rate)
print(f"P(X={k_events}) for lambda={lambda_rate}: {prob_k}")

9.4. Равномерное распределение (непрерывное)

f(x)=1ba,x[a,b]

Объяснение: Непрерывное равномерное распределение присваивает одинаковую плотность вероятности всем точкам в интервале [a,b].

Пример: Для a=0,b=2, f(1)=120=12.

Реализация (используя scipy.stats):


from scipy.stats import uniform

a_start = 0
b_end = 2
x_point = 1

# loc = a, scale = b - a
pdf_value = uniform.pdf(x=x_point, loc=a_start, scale=(b_end - a_start))
print(f"PDF at x={x_point} for U({a_start}, {b_end}): {pdf_value}")

9.5. Дискретное равномерное распределение

P(X=x)=1n,x{x1,x2,,xn}(часто x{1,2,,n})

Объяснение: Дискретное равномерное распределение присваивает одинаковую вероятность n дискретным исходам.

Пример: Для n=6 (исходы 1, 2, 3, 4, 5, 6), P(X=3)=16.

Реализация (используя scipy.stats.randint):


from scipy.stats import randint

low_val = 1 # Нижняя граница (включительно)
high_val = 7 # Верхняя граница (не включительно, т.е. исходы 1..6)
n_outcomes = high_val - low_val
k_value = 3

prob_k = randint.pmf(k=k_value, low=low_val, high=high_val)
# Или просто 1.0 / n_outcomes
print(f"P(X={k_value}) for discrete uniform (1 to {n_outcomes}): {prob_k}")

9.6. Нормальное (Гауссово) распределение

f(x)=12πσ2e(xμ)22σ2 (где μ - среднее, σ2 - дисперсия)

Объяснение: Нормальное распределение моделирует данные с симметричной колоколообразной формой, определяемой средним μ и стандартным отклонением σ. Основополагающее распределение в статистике.

Пример: Для μ=0,σ=1 (стандартное нормальное), f(0)=12πe0=12π0.3989.

Реализация (используя scipy.stats):


from scipy.stats import norm

mean_mu = 0
std_dev_sigma = 1
x_point = 0

pdf_value = norm.pdf(x=x_point, loc=mean_mu, scale=std_dev_sigma)
print(f"PDF at x={x_point} for N({mean_mu}, {std_dev_sigma**2}): {pdf_value}")

9.7. Экспоненциальное распределение

f(x)=λeλx,x0 (где λ>0 - параметр интенсивности)

Объяснение: Экспоненциальное распределение моделирует время между событиями в Пуассоновском процессе (процессе с постоянной средней интенсивностью).

Пример: Для λ=2, f(1)=2e2×1=2e22×0.1353=0.2706.

Реализация (используя scipy.stats):


from scipy.stats import expon

lambda_rate = 2
# В scipy.stats.expon, scale = 1 / lambda
scale_param = 1 / lambda_rate
x_point = 1

pdf_value = expon.pdf(x=x_point, scale=scale_param)
print(f"PDF at x={x_point} for Exp(lambda={lambda_rate}): {pdf_value}")

9.8. Геометрическое распределение

P(X=k)=(1p)k1p,k{1,2,3,} (где p - вероятность успеха в одном испытании, k - номер первого успешного испытания)

Объяснение: Геометрическое распределение моделирует количество испытаний Бернулли до первого успеха (включительно).

Пример: Для p=0.5, P(X=3)=(10.5)31(0.5)=(0.5)2(0.5)=0.25×0.5=0.125.

Реализация (используя scipy.stats):


from scipy.stats import geom

p_success = 0.5
k_first_success = 3

prob_k = geom.pmf(k=k_first_success, p=p_success)
print(f"P(X={k_first_success}) for Geom(p={p_success}): {prob_k}")

9.9. Гипергеометрическое распределение

P(X=k)=(Kk)(NKnk)(Nn) (где N - размер совокупности, K - количество успехов в совокупности, n - размер выборки (без возвращения), k - количество успехов в выборке)

Объяснение: Гипергеометрическое распределение моделирует количество успехов в выборке размера n, извлеченной без возвращения из конечной совокупности размера N, содержащей K успехов.

Пример: Из N=20 шаров, где K=7 белых, извлекают n=5 шаров. Вероятность извлечь k=3 белых шара.

Реализация (используя scipy.stats):


from scipy.stats import hypergeom

N_population = 20
K_success_population = 7
n_sample = 5
k_success_sample = 3

# M = N (общее число объектов)
# n = K (число объектов типа "успех" в совокупности)
# N = n (размер выборки)
prob_k = hypergeom.pmf(k=k_success_sample, M=N_population, n=K_success_population, N=n_sample)
print(f"P(X={k_success_sample}) for Hypergeom(N={N_population}, K={K_success_population}, n={n_sample}): {prob_k}")

9.10. Бета-распределение

f(x;α,β)=1B(α,β)xα1(1x)β1,x[0,1] (где α>0,β>0 - параметры формы, B(α,β)=Γ(α)Γ(β)Γ(α+β) - Бета-функция)

Объяснение: Бета-распределение моделирует вероятности (или пропорции), значения которых лежат в интервале [0, 1], как функцию параметров формы α и β. Часто используется как априорное распределение для параметра Бернулли/биномиального.

Пример: Для α=2,β=3, вычислить f(0.5).

Реализация (используя scipy.stats):


from scipy.stats import beta

alpha_param = 2
beta_param = 3
x_point = 0.5

pdf_value = beta.pdf(x=x_point, a=alpha_param, b=beta_param)
print(f"PDF at x={x_point} for Beta(alpha={alpha_param}, beta={beta_param}): {pdf_value}")

9.11. Гамма-распределение

f(x;α,β)=βαΓ(α)xα1eβx,x>0 (где α>0 - параметр формы, β>0 - параметр интенсивности (rate). Иногда параметризуется через масштаб θ=1/β)

Объяснение: Гамма-распределение обобщает экспоненциальное распределение (при α=1), часто используется для моделирования времени ожидания, сумм случайных величин.

Пример: Для α=2,β=1, вычислить f(1). f(1)=12Γ(2)121e1×1=11!1e1=e10.3679.

Реализация (используя scipy.stats):


from scipy.stats import gamma

alpha_shape = 2
beta_rate = 1
# В scipy.stats.gamma, 'a' - это форма alpha, 'scale' = 1 / beta_rate
scale_param = 1 / beta_rate
x_point = 1

pdf_value = gamma.pdf(x=x_point, a=alpha_shape, scale=scale_param)
print(f"PDF at x={x_point} for Gamma(alpha={alpha_shape}, beta={beta_rate}): {pdf_value}")

9.12. Мультиномиальное распределение

P(X1=k1,,Xc=kc)=n!k1!kc!p1k1pckc (где n - количество испытаний, c - количество категорий, ki - количество исходов i-й категории (ki=n), pi - вероятность i-й категории (pi=1))

Объяснение: Мультиномиальное распределение обобщает биномиальное распределение на случай с более чем двумя категориями исходов.

Пример: Для n=3 испытаний, c=3 категорий с вероятностями p=[0.2,0.5,0.3], какова вероятность получить по одному исходу каждой категории, т.е., k=[1,1,1]. P=3!1!1!1!(0.2)1(0.5)1(0.3)1=6×0.2×0.5×0.3=0.18.

Реализация (используя scipy.stats):


from scipy.stats import multinomial

n_trials = 3
p_probs = [0.2, 0.5, 0.3]
k_counts = [1, 1, 1] # Наблюдаемые количества для каждой категории

prob_k = multinomial.pmf(x=k_counts, n=n_trials, p=p_probs)
print(f"P(k={k_counts}) for Multinomial(n={n_trials}, p={p_probs}): {prob_k}")

9.13. Распределение Хи-квадрат (χ2)

f(x;k)=12k/2Γ(k/2)xk/21ex/2,x>0 (где k - число степеней свободы)

Объяснение: Распределение хи-квадрат моделирует сумму квадратов k независимых стандартных нормальных случайных величин. Широко используется в проверке гипотез (например, критерий согласия Пирсона).

Пример: Для k=3 степеней свободы, вычислить f(2).

Реализация (используя scipy.stats):


from scipy.stats import chi2

k_df = 3 # Степени свободы
x_point = 2

pdf_value = chi2.pdf(x=x_point, df=k_df)
print(f"PDF at x={x_point} for Chi2(df={k_df}): {pdf_value}")

9.14. Распределение Стьюдента (t-распределение)

f(t;ν)=Γ((ν+1)/2)νπΓ(ν/2)(1+t2ν)(ν+1)/2 (где ν - число степеней свободы)

Объяснение: Распределение Стьюдента используется для оценки параметров генеральной совокупности (например, среднего), когда размер выборки мал и дисперсия совокупности неизвестна (оценивается по выборке).

Пример: Для ν=5 степеней свободы, вычислить f(1).

Реализация (используя scipy.stats):


from scipy.stats import t

nu_df = 5 # Степени свободы
t_point = 1

pdf_value = t.pdf(x=t_point, df=nu_df)
print(f"PDF at t={t_point} for Student's t(df={nu_df}): {pdf_value}")

9.15. F-распределение (Фишера-Снедекора)

f(x;d1,d2)=1B(d1/2,d2/2)(d1d2)d1/2xd1/21(1+d1d2x)(d1+d2)/2,x>0 (где d1,d2 - степени свободы числителя и знаменателя)

Объяснение: F-распределение моделирует отношение двух независимых хи-квадрат распределенных величин, деленных на их степени свободы. Широко используется в дисперсионном анализе (ANOVA) для сравнения дисперсий.

Пример: Для степеней свободы d1=5,d2=10, вычислить f(2).

Реализация (используя scipy.stats):


from scipy.stats import f

d1_dfn = 5 # Степени свободы числителя
d2_dfd = 10 # Степени свободы знаменателя
x_point = 2

pdf_value = f.pdf(x=x_point, dfn=d1_dfn, dfd=d2_dfd)
print(f"PDF at x={x_point} for F(dfn={d1_dfn}, dfd={d2_dfd}): {pdf_value}")

9.16. Распределение Лапласа (Двойное экспоненциальное)

f(x;μ,b)=12be|xμ|b (где μ - параметр положения (медиана), b>0 - параметр масштаба)

Объяснение: Распределение Лапласа, также известное как двойное экспоненциальное, используется для моделирования разностей или ошибок, имеет более тяжелые хвосты, чем нормальное распределение. Связано с L1 регуляризацией.

Реализация (используя scipy.stats):


from scipy.stats import laplace

mu_location = 0
b_scale = 1
x_point = 0

# loc = mu, scale = b
pdf_value = laplace.pdf(x=x_point, loc=mu_location, scale=b_scale)
print(f"PDF at x={x_point} for Laplace(mu={mu_location}, b={b_scale}): {pdf_value}")

9.17. Распределение Рэлея

f(x;σ)=xσ2ex2/(2σ2),x0 (где σ>0 - параметр масштаба)

Объяснение: Распределение Рэлея моделирует величину (модуль) двумерного вектора, компоненты которого являются независимыми нормальными случайными величинами с нулевым средним и одинаковой дисперсией σ2.

Реализация (используя scipy.stats):


from scipy.stats import rayleigh

sigma_scale = 1 # Параметр sigma в формуле
x_point = 2

# В scipy.stats.rayleigh, scale = sigma
pdf_value = rayleigh.pdf(x=x_point, scale=sigma_scale)
print(f"PDF at x={x_point} for Rayleigh(sigma={sigma_scale}): {pdf_value}")

9.18. Треугольное распределение

f(x;a,b,c)={2(xa)(ba)(ca),ax<c2(bx)(ba)(bc),cxb (где a - минимум, b - максимум, c - мода (acb))

Объяснение: Треугольное распределение моделирует данные с известными минимумом, максимумом и модой (наиболее вероятным значением).

Реализация (используя scipy.stats):


from scipy.stats import triang

a_min = 0 # Минимум
b_max = 1 # Максимум
c_mode = 0.5 # Мода

# В scipy.stats.triang:
# loc = a (минимум)
# scale = b - a (диапазон)
# c = (mode - a) / (b - a) (относительное положение моды)
c_relative = (c_mode - a_min) / (b_max - a_min)
x_point = 0.5

pdf_value = triang.pdf(x=x_point, c=c_relative, loc=a_min, scale=(b_max - a_min))
print(f"PDF at x={x_point} for Triangular(a={a_min}, b={b_max}, c={c_mode}): {pdf_value}")

9.19. Логнормальное распределение

f(x;μ,σ)=1xσ2πe(lnxμ)22σ2,x>0 (где μ,σ - среднее и стандартное отклонение логарифма переменной)

Объяснение: Логнормальное распределение моделирует данные, логарифм которых следует нормальному распределению. Часто используется для величин, которые являются произведением многих малых факторов.

Реализация (используя scipy.stats):


from scipy.stats import lognorm

mu_log = 0 # Среднее log(x)
sigma_log = 1 # Стандартное отклонение log(x)
x_point = 2

# В scipy.stats.lognorm:
# s = sigma_log (параметр формы)
# scale = exp(mu_log) (параметр масштаба)
scale_param = np.exp(mu_log)

pdf_value = lognorm.pdf(x=x_point, s=sigma_log, scale=scale_param)
print(f"PDF at x={x_point} for LogNorm(mu_log={mu_log}, sigma_log={sigma_log}): {pdf_value}")

9.20. Арксинусное распределение

f(x)=1πx(1x),x(0,1)

Объяснение: Арксинусное распределение (частный случай Бета-распределения с α=β=0.5) моделирует вероятности, где крайние значения (близкие к 0 и 1) более вероятны, чем значения в середине.

Реализация (используя scipy.stats):


from scipy.stats import arcsine

x_point = 0.5

pdf_value = arcsine.pdf(x=x_point)
print(f"PDF at x={x_point} for Arcsine: {pdf_value}") # 1/(pi*sqrt(0.25)) = 1/(pi*0.5) = 2/pi ~ 0.6366

9.21. Бета-биномиальное распределение

P(X=k|n,α,β)=(nk)B(k+α,nk+β)B(α,β) (где n - число испытаний, α,β - параметры Бета-распределения (априорного для p))

Объяснение: Бета-биномиальное распределение моделирует количество успехов в n испытаниях Бернулли, где вероятность успеха p сама является случайной величиной, следующей Бета-распределению. Учитывает избыточную дисперсию по сравнению с биномиальным.

Реализация (используя scipy.stats):


from scipy.stats import betabinom

n_trials = 5
alpha_param = 2
beta_param = 3
k_successes = 2

prob_k = betabinom.pmf(k=k_successes, n=n_trials, a=alpha_param, b=beta_param)
print(f"P(X={k_successes}) for BetaBinom(n={n_trials}, a={alpha_param}, b={beta_param}): {prob_k}")

9.22. Распределение Коши (Лоренца)

f(x;x0,γ)=1πγ[1+(xx0γ)2] (где x0 - параметр положения (медиана), γ>0 - параметр масштаба (половина ширины на полувысоте))

Объяснение: Распределение Коши моделирует данные с очень тяжелыми хвостами (среднее и дисперсия не определены). Часто используется в робастной статистике.

Реализация (используя scipy.stats):


from scipy.stats import cauchy

x0_location = 0
gamma_scale = 1
x_point = 0

# loc = x0, scale = gamma
pdf_value = cauchy.pdf(x=x_point, loc=x0_location, scale=gamma_scale)
print(f"PDF at x={x_point} for Cauchy(x0={x0_location}, gamma={gamma_scale}): {pdf_value}") # 1/(pi*1*(1+0)) = 1/pi

9.23. Распределение Вейбулла

f(x;k,λ)=kλ(xλ)k1e(x/λ)k,x0 (где k>0 - параметр формы, λ>0 - параметр масштаба)

Объяснение: Распределение Вейбулла используется в анализе надежности (времени до отказа) и моделировании времени жизни, интенсивности отказов.

Реализация (используя scipy.stats.weibull_min):


from scipy.stats import weibull_min

k_shape = 1.5 # Параметр формы k (в scipy это 'c')
lambda_scale = 1 # Параметр масштаба lambda (в scipy это 'scale')
x_point = 2

# c = k_shape, scale = lambda_scale
pdf_value = weibull_min.pdf(x=x_point, c=k_shape, scale=lambda_scale)
print(f"PDF at x={x_point} for Weibull(k={k_shape}, lambda={lambda_scale}): {pdf_value}")

Примечание: Существует также `weibull_max`. `weibull_min` соответствует приведенной формуле.

9.24. Распределение Парето

f(x;xm,α)=αxmαxα+1,xxm (где xm>0 - параметр масштаба (минимальное значение), α>0 - параметр формы)

Объяснение: Распределение Парето моделирует распределение богатства, размеров городов и другие явления с тяжелыми хвостами ("принцип 80-20").

Реализация (используя scipy.stats):


from scipy.stats import pareto

alpha_shape = 1 # Параметр формы alpha (в scipy это 'b')
# В scipy, x_m неявно равен 1, если не задан loc/scale.
# Чтобы соответствовать формуле: loc=0, scale=x_m
xm_scale = 1 # Минимальное значение x_m
x_point = 2

# b = alpha_shape, scale = xm_scale
pdf_value = pareto.pdf(x=x_point, b=alpha_shape, scale=xm_scale)
print(f"PDF at x={x_point} for Pareto(alpha={alpha_shape}, xm={xm_scale}): {pdf_value}")

9.25. Лог-Коши распределение

f(x;x0,γ)=1xπγ[1+(lnxlnx0γ)2],x>0 (Распределение случайной величины Y, если lnY имеет распределение Коши с параметрами lnx0 и γ)

Объяснение: Лог-Коши распределение является результатом логарифмического преобразования случайной величины, распределенной по Коши. Имеет тяжелые хвосты.

Реализация (используя scipy.stats.logcauchy):


from scipy.stats import logcauchy

# Параметры соответствующего распределения Коши для log(X)
log_x0_location = 0 # = log(x0)
gamma_scale = 1

x_point = 2 # Значение x > 0

# loc = log_x0_location, scale = gamma_scale
# pdf_value = logcauchy.pdf(x=x_point, loc=log_x0_location, scale=gamma_scale)
# Примечание: logcauchy может отсутствовать в старых версиях SciPy.
# Можно вычислить вручную, используя pdf Коши:
from scipy.stats import cauchy
import numpy as np

if x_point > 0:
    pdf_val_manual = cauchy.pdf(np.log(x_point), loc=log_x0_location, scale=gamma_scale) / x_point
else:
    pdf_val_manual = 0

print(f"PDF at x={x_point} for LogCauchy(log_x0={log_x0_location}, gamma={gamma_scale}): {pdf_val_manual}")
Предыдущая глава    Следующая глава

Другие статьи по этой теме: