- Глава 1. ЛИНЕЙНАЯ АЛГЕБРА
- Глава 2. ВЕРОЯТНОСТЬ И СТАТИСТИКА
- Глава 3. МАТЕМАТИЧЕСКИЙ АНАЛИЗ (CALCULUS)
- Глава 4. ОПТИМИЗАЦИЯ
- Глава 5. РЕГРЕССИЯ
- Глава 6. НЕЙРОННЫЕ СЕТИ
- Глава 7. КЛАСТЕРИЗАЦИЯ
- Глава 8. ПОНИЖЕНИЕ РАЗМЕРНОСТИ
- Глава 9. РАСПРЕДЕЛЕНИЯ ВЕРОЯТНОСТЕЙ
- Глава 10. ОБУЧЕНИЕ С ПОДКРЕПЛЕНИЕМ
Глава 9. РАСПРЕДЕЛЕНИЯ ВЕРОЯТНОСТЕЙ
9.1. Распределение Бернулли
Объяснение: Распределение Бернулли моделирует одно бинарное событие (испытание) с вероятностью успеха
Пример: Для
Реализация (используя 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. Биномиальное распределение
Объяснение: Биномиальное распределение моделирует количество успехов в
Пример: Для
Реализация (используя 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. Распределение Пуассона
Объяснение: Распределение Пуассона моделирует количество событий, происходящих в фиксированном интервале времени или пространства, со средней интенсивностью
Пример: Для
Реализация (используя 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. Равномерное распределение (непрерывное)
Объяснение: Непрерывное равномерное распределение присваивает одинаковую плотность вероятности всем точкам в интервале
Пример: Для
Реализация (используя 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. Дискретное равномерное распределение
Объяснение: Дискретное равномерное распределение присваивает одинаковую вероятность
Пример: Для
Реализация (используя 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. Нормальное (Гауссово) распределение
Объяснение: Нормальное распределение моделирует данные с симметричной колоколообразной формой, определяемой средним
Пример: Для
Реализация (используя 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. Экспоненциальное распределение
Объяснение: Экспоненциальное распределение моделирует время между событиями в Пуассоновском процессе (процессе с постоянной средней интенсивностью).
Пример: Для
Реализация (используя 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. Геометрическое распределение
Объяснение: Геометрическое распределение моделирует количество испытаний Бернулли до первого успеха (включительно).
Пример: Для
Реализация (используя 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. Гипергеометрическое распределение
Объяснение: Гипергеометрическое распределение моделирует количество успехов в выборке размера
Пример: Из 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. Бета-распределение
Объяснение: Бета-распределение моделирует вероятности (или пропорции), значения которых лежат в интервале [0, 1], как функцию параметров формы
Пример: Для
Реализация (используя 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. Гамма-распределение
Объяснение: Гамма-распределение обобщает экспоненциальное распределение (при
Пример: Для
Реализация (используя 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. Мультиномиальное распределение
Объяснение: Мультиномиальное распределение обобщает биномиальное распределение на случай с более чем двумя категориями исходов.
Пример: Для n=3 испытаний, c=3 категорий с вероятностями
Реализация (используя 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. Распределение Хи-квадрат ( )
Объяснение: Распределение хи-квадрат моделирует сумму квадратов
Пример: Для
Реализация (используя 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-распределение)
Объяснение: Распределение Стьюдента используется для оценки параметров генеральной совокупности (например, среднего), когда размер выборки мал и дисперсия совокупности неизвестна (оценивается по выборке).
Пример: Для
Реализация (используя 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-распределение моделирует отношение двух независимых хи-квадрат распределенных величин, деленных на их степени свободы. Широко используется в дисперсионном анализе (ANOVA) для сравнения дисперсий.
Пример: Для степеней свободы
Реализация (используя 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. Распределение Лапласа (Двойное экспоненциальное)
Объяснение: Распределение Лапласа, также известное как двойное экспоненциальное, используется для моделирования разностей или ошибок, имеет более тяжелые хвосты, чем нормальное распределение. Связано с 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. Распределение Рэлея
Объяснение: Распределение Рэлея моделирует величину (модуль) двумерного вектора, компоненты которого являются независимыми нормальными случайными величинами с нулевым средним и одинаковой дисперсией
Реализация (используя 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. Треугольное распределение
Объяснение: Треугольное распределение моделирует данные с известными минимумом, максимумом и модой (наиболее вероятным значением).
Реализация (используя 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. Логнормальное распределение
Объяснение: Логнормальное распределение моделирует данные, логарифм которых следует нормальному распределению. Часто используется для величин, которые являются произведением многих малых факторов.
Реализация (используя 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. Арксинусное распределение
Объяснение: Арксинусное распределение (частный случай Бета-распределения с
Реализация (используя 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. Бета-биномиальное распределение
Объяснение: Бета-биномиальное распределение моделирует количество успехов в
Реализация (используя 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. Распределение Коши (Лоренца)
Объяснение: Распределение Коши моделирует данные с очень тяжелыми хвостами (среднее и дисперсия не определены). Часто используется в робастной статистике.
Реализация (используя 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. Распределение Вейбулла
Объяснение: Распределение Вейбулла используется в анализе надежности (времени до отказа) и моделировании времени жизни, интенсивности отказов.
Реализация (используя 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. Распределение Парето
Объяснение: Распределение Парето моделирует распределение богатства, размеров городов и другие явления с тяжелыми хвостами ("принцип 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. Лог-Коши распределение
Объяснение: Лог-Коши распределение является результатом логарифмического преобразования случайной величины, распределенной по Коши. Имеет тяжелые хвосты.
Реализация (используя 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}")