Глава 2. ВЕРОЯТНОСТЬ И СТАТИСТИКА
2.1. Условная вероятность
\[ P(A | B) = \frac{P(A \cap B)}{P(B)}, \quad P(B) > 0 \]Объяснение: Условная вероятность определяет вероятность наступления события A при условии, что событие B уже произошло. Это фундаментальное понятие в вероятностном мышлении и байесовском выводе.
Пример: Если \(P(A \cap B) = 0.2\) и \(P(B) = 0.5\), то \(P(A | B) = \frac{0.2}{0.5} = 0.4\).
Реализация:
P_A_and_B = 0.2
P_B = 0.5
P_A_given_B = P_A_and_B / P_B
2.2. Формула полной вероятности
\[ P(A) = \sum_{i} P(A | B_i)P(B_i) \]Объяснение: Формула полной вероятности связывает вероятность события A с вероятностями A при условии наступления событий из разбиения \(\{B_i\}\). Используется в сценариях с условными зависимостями.
Пример: Если \(P(A | B_1) = 0.3\), \(P(A | B_2) = 0.7\), \(P(B_1) = 0.4\) и \(P(B_2) = 0.6\), то \(P(A) = 0.3 \cdot 0.4 + 0.7 \cdot 0.6 = 0.12 + 0.42 = 0.54\).
Реализация:
P_A_given_B1 = 0.3
P_A_given_B2 = 0.7
P_B1 = 0.4
P_B2 = 0.6
P_A = P_A_given_B1 * P_B1 + P_A_given_B2 * P_B2
2.3. Теорема Байеса
\[ P(A | B) = \frac{P(B | A)P(A)}{P(B)}, \quad P(B) > 0 \]Объяснение: Теорема Байеса позволяет "обращать" условные вероятности, часто используется для обновления убеждений с учетом новых данных в МО и статистике.
Пример: Если \(P(B | A) = 0.8\), \(P(A) = 0.3\) и \(P(B) = 0.5\), то \(P(A | B) = \frac{0.8 \cdot 0.3}{0.5} = \frac{0.24}{0.5} = 0.48\).
Реализация:
P_B_given_A = 0.8
P_A = 0.3
P_B = 0.5
P_A_given_B = (P_B_given_A * P_A) / P_B
2.4. Математическое ожидание
\[ E[X] = \sum_{i} x_i P(X = x_i) \]Объяснение: Математическое ожидание (среднее значение) случайной величины — это средневзвешенное всех возможных ее значений, где весами служат их вероятности. Это центральное понятие в теории вероятностей и статистике.
Пример: Если \(X = \{1, 2, 3\}\) с \(P(X = 1) = 0.2\), \(P(X = 2) = 0.5\) и \(P(X = 3) = 0.3\), то \(E[X] = 1 \cdot 0.2 + 2 \cdot 0.5 + 3 \cdot 0.3 = 0.2 + 1.0 + 0.9 = 2.1\).
Реализация:
X = [1, 2, 3]
P_X = [0.2, 0.5, 0.3]
expectation = sum(x * p for x, p in zip(X, P_X))
2.5. Дисперсия
\[ \text{Var}(X) = E[(X - E[X])^2] = E[X^2] - (E[X])^2 \]Объяснение: Дисперсия измеряет разброс случайной величины относительно ее среднего значения. Широко используется в МО для оценки неопределенности и производительности модели.
Пример: Для \(X = \{1, 2, 3\}\) с \(P(X = 1) = 0.2\), \(P(X = 2) = 0.5\) и \(P(X = 3) = 0.3\), вычислим \(E[X] = 2.1\). \(E[X^2] = 1^2 \cdot 0.2 + 2^2 \cdot 0.5 + 3^2 \cdot 0.3 = 0.2 + 2.0 + 2.7 = 4.9\). Тогда \(\text{Var}(X) = 4.9 - (2.1)^2 = 4.9 - 4.41 = 0.49\). (Примечание: в исходном примере результат был 0.29, возможно, была ошибка в E[X^2]=4.7).
Реализация:
X = [1, 2, 3]
P_X = [0.2, 0.5, 0.3]
expectation = sum(x * p for x, p in zip(X, P_X))
expectation_X2 = sum(x**2 * p for x, p in zip(X, P_X))
variance = expectation_X2 - expectation**2
2.6. Стандартное отклонение
\[ \sigma(X) = \sqrt{\text{Var}(X)} \]Объяснение: Стандартное отклонение — это квадратный корень из дисперсии; оно предоставляет меру разброса в тех же единицах, что и случайная величина. Широко используется в анализе данных и МО для оценки изменчивости.
Пример: Если \(\text{Var}(X) = 0.49\) (из предыдущего примера), то \(\sigma(X) = \sqrt{0.49} = 0.7\).
Реализация:
import math
variance = 0.49 # Используем исправленное значение
std_dev = math.sqrt(variance) # Или variance**0.5
2.7. Ковариация
\[ \text{Cov}(X, Y) = E[(X - E[X])(Y - E[Y])] \]Объяснение: Ковариация измеряет совместную изменчивость двух случайных величин. Положительное значение указывает, что они имеют тенденцию увеличиваться вместе, а отрицательное — на обратную зависимость.
Пример: Если \(X = \{1, 2\}\), \(Y = \{3, 4\}\), совместное распределение \(P(X=1, Y=3)=0.5, P(X=2, Y=4)=0.5\). Тогда \(E[X] = 1 \cdot 0.5 + 2 \cdot 0.5 = 1.5\), \(E[Y] = 3 \cdot 0.5 + 4 \cdot 0.5 = 3.5\). \(\text{Cov}(X, Y) = (1 - 1.5)(3 - 3.5) \cdot 0.5 + (2 - 1.5)(4 - 3.5) \cdot 0.5 = (-0.5)(-0.5) \cdot 0.5 + (0.5)(0.5) \cdot 0.5 = 0.25 \cdot 0.5 + 0.25 \cdot 0.5 = 0.125 + 0.125 = 0.25\).
Реализация:
# Для дискретного случая с заданным совместным распределением
X_values = [1, 2]
Y_values = [3, 4]
Joint_P = {(1, 3): 0.5, (2, 4): 0.5} # Пример совместного распределения
# Вычисляем маржинальные вероятности и ожидания
P_X = {x: sum(Joint_P.get((x, y), 0) for y in Y_values) for x in X_values}
P_Y = {y: sum(Joint_P.get((x, y), 0) for x in X_values) for y in Y_values}
E_X = sum(x * P_X[x] for x in X_values)
E_Y = sum(y * P_Y[y] for y in Y_values)
covariance = sum((x - E_X) * (y - E_Y) * p
for (x, y), p in Joint_P.items())
# Реализация из OCR (предполагает, что X, Y, P_XY - списки соответствующих значений):
# X = [1, 2]
# Y = [3, 4]
# P_XY = [0.5, 0.5] # Некорректно представляет совместное распределение
# E_X = sum(x * p for x, p in zip(X, P_XY)) # Неправильное вычисление E_X
# E_Y = sum(y * p for y, p in zip(Y, P_XY)) # Неправильное вычисление E_Y
# covariance = sum((x - E_X) * (y - E_Y) * p for x, y, p in zip(X, Y, P_XY)) # Неправильное вычисление ковариации
Примечание: Реализация из OCR некорректна для вычисления ковариации по совместному распределению. Представлен корректный подход выше.
2.8. Корреляция
\[ \rho(X, Y) = \frac{\text{Cov}(X, Y)}{\sigma(X)\sigma(Y)} \]Объяснение: Корреляция нормализует ковариацию к шкале от [-1, 1], количественно оценивая силу и направление линейной зависимости между двумя переменными.
Пример: Если \(\text{Cov}(X, Y) = 0.25\), \(\sigma(X) = 0.5\) (\(\text{Var}(X)=0.25\)), и \(\sigma(Y) = 0.5\) (\(\text{Var}(Y)=0.25\)) (для данных из примера ковариации), то \(\rho(X, Y) = \frac{0.25}{0.5 \cdot 0.5} = \frac{0.25}{0.25} = 1\). (Примечание: в исходном примере \(\sigma(Y)=1.0\), что не соответствует данным).
Реализация:
import math
# Используем значения из примера ковариации
covariance = 0.25
variance_X = 0.25 # (1^2*0.5 + 2^2*0.5) - 1.5^2 = (0.5+2) - 2.25 = 2.5-2.25=0.25
variance_Y = 0.25 # (3^2*0.5 + 4^2*0.5) - 3.5^2 = (4.5+8) - 12.25 = 12.5-12.25=0.25
std_X = math.sqrt(variance_X)
std_Y = math.sqrt(variance_Y)
# Избегаем деления на ноль, если стандартное отклонение равно 0
if std_X > 0 and std_Y > 0:
correlation = covariance / (std_X * std_Y)
else:
correlation = 0 # Или другое подходящее значение (NaN, None)
2.9. Функция вероятности (PMF - Probability Mass Function)
\[ P(X = x) = \begin{cases} p_i, & \text{if } x = x_i \\ 0, & \text{otherwise} \end{cases} \]Объяснение: PMF определяет вероятности дискретных исходов случайной величины. Это основополагающее понятие в теории вероятностей.
Пример: Если \(X = \{1, 2, 3\}\) с \(P(X = 1) = 0.2\), \(P(X = 2) = 0.5\) и \(P(X = 3) = 0.3\), то PMF определена для этих значений.
Реализация:
X_values = [1, 2, 3]
P_X_probs = [0.2, 0.5, 0.3]
# Создаем словарь для удобного доступа
pmf_dict = dict(zip(X_values, P_X_probs))
def pmf(x):
return pmf_dict.get(x, 0) # Возвращает вероятность или 0, если значение не найдено
# Пример использования
print(pmf(2)) # Выведет 0.5
print(pmf(4)) # Выведет 0
2.10. Функция плотности вероятности (PDF - Probability Density Function)
\[ f_X(x) \ge 0, \quad \int_{-\infty}^{\infty} f_X(x)dx = 1 \]Объяснение: PDF определяет относительную правдоподобность непрерывной случайной величины принимать определенное значение. Используется в теории вероятностей и статистике для моделирования непрерывных распределений.
Пример: Для стандартного нормального распределения PDF равна \(f_X(x) = \frac{1}{\sqrt{2\pi}} e^{-x^2/2}\).
Реализация:
import numpy as np
from scipy.stats import norm
x = 0 # пример точки
pdf_value = norm.pdf(x, loc=0, scale=1) # loc - среднее, scale - стандартное отклонение
2.11. Совместная вероятность
\[ P(A \cap B) = P(A | B)P(B) \quad (= P(B | A)P(A)) \]Объяснение: Совместная вероятность определяет вероятность одновременного наступления двух событий. Она важна в вероятностном моделировании и понимании взаимосвязей между переменными.
Пример: Если \(P(A | B) = 0.4\) и \(P(B) = 0.5\), то \(P(A \cap B) = 0.4 \cdot 0.5 = 0.2\).
Реализация:
P_A_given_B = 0.4
P_B = 0.5
P_A_and_B = P_A_given_B * P_B
2.12. Функция распределения (CDF - Cumulative Distribution Function)
\[ F_X(x) = P(X \le x) \]Объяснение: CDF случайной величины дает вероятность того, что переменная примет значение, меньшее или равное x. Используется для описания функции распределения как для дискретных, так и для непрерывных переменных.
Пример: Для равномерного распределения \(X \sim U(0, 1)\), \(F_X(0.5) = 0.5\).
Реализация:
from scipy.stats import uniform
x = 0.5
cdf_value = uniform.cdf(x, loc=0, scale=1) # loc - начало интервала, scale - длина интервала
2.13. Энтропия (дискретная)
\[ H(X) = - \sum_{i} P(X = x_i) \log_2 P(X = x_i) \]Объяснение: Энтропия измеряет неопределенность дискретной случайной величины. Это фундаментальное понятие в теории информации и МО, особенно в деревьях решений и функциях потерь.
Пример: Если \(P(X) = \{0.5, 0.5\}\), то \(H(X) = -0.5 \log_2(0.5) - 0.5 \log_2(0.5) = -0.5 \cdot (-1) - 0.5 \cdot (-1) = 0.5 + 0.5 = 1\).
Реализация:
import numpy as np
P_X = [0.5, 0.5]
# Исключаем p=0, так как log2(0) не определен, но p*log2(p) стремится к 0 при p->0
entropy = -sum(p * np.log2(p) for p in P_X if p > 0)
2.14. Условное математическое ожидание
\[ E[X | Y] = \sum_{x} x P(X = x | Y) \]Объяснение: Условное математическое ожидание — это ожидаемое значение случайной величины X при условии, что известна другая переменная Y. Критически важно в байесовском выводе и вероятностном моделировании.
Пример: Если \(X = \{1, 2\}\) с \(P(X = 1 | Y) = 0.7\) и \(P(X = 2 | Y) = 0.3\), то \(E[X | Y] = 1 \cdot 0.7 + 2 \cdot 0.3 = 0.7 + 0.6 = 1.3\).
Реализация:
X_values = [1, 2]
P_X_given_Y = [0.7, 0.3] # Вероятности P(X=x | Y) для x из X_values
conditional_expectation = sum(x * p for x, p in zip(X_values, P_X_given_Y))
2.15. Закон повторных ожиданий (Law of Iterated Expectations / Law of Total Expectation)
\[ E[X] = E[E[X | Y]] \]Объяснение: Закон повторных ожиданий утверждает, что математическое ожидание X равно средневзвешенному его условных математических ожиданий по Y. Это основополагающий закон в теории вероятностей и статистике.
Пример: Предположим, X зависит от \(Y = \{1, 2\}\), с \(E[X | Y = 1] = 3\), \(E[X | Y = 2] = 5\), и \(P(Y = 1) = 0.6\), \(P(Y = 2) = 0.4\). Тогда \(E[X] = E[X | Y=1]P(Y=1) + E[X | Y=2]P(Y=2) = 3 \cdot 0.6 + 5 \cdot 0.4 = 1.8 + 2.0 = 3.8\).
Реализация:
E_X_given_Y_values = [3, 5] # Условные ожидания E[X|Y=y]
P_Y_probs = [0.6, 0.4] # Вероятности P(Y=y)
E_X = sum(e * p for e, p in zip(E_X_given_Y_values, P_Y_probs))
2.16. Маргинальная вероятность
\[ P(A) = \sum_{B} P(A \cap B) \quad \text{(для дискретного B)} \] \[ P(A) = \int P(A, B) dB \quad \text{(для непрерывного B)} \]Объяснение: Маргинальная вероятность вычисляет вероятность события A путем суммирования (или интегрирования, для непрерывных случаев) по всем возможным исходам другой переменной B. Используется в вероятностном моделировании для сокращения совместных распределений.
Пример: Если \(P(A \cap B_1) = 0.3\) и \(P(A \cap B_2) = 0.4\), где \(\{B_1, B_2\}\) - разбиение, то \(P(A) = 0.3 + 0.4 = 0.7\).
Реализация:
# Если P_A_and_B - список совместных вероятностей P(A и Bi) для разбиения Bi
P_A_and_B_list = [0.3, 0.4]
P_A = sum(P_A_and_B_list)
2.17. Асимметрия (Skewness)
\[ \text{Skewness}(X) = \frac{E[(X - \mu)^3]}{\sigma^3} \]Объяснение: Асимметрия измеряет несимметричность распределения вероятностей случайной величины относительно ее среднего. Положительная асимметрия указывает на более длинный правый хвост, а отрицательная — на более длинный левый хвост.
Пример: Для \(X = \{1, 2, 3\}\) со средним \(\mu = 2\) и стандартным отклонением \(\sigma = \sqrt{2/3} \approx 0.816\). Вычислить Асимметрию(X), используя третий центральный момент. \(E[(X - \mu)^3] = (1-2)^3 P(1) + (2-2)^3 P(2) + (3-2)^3 P(3)\). Если предположить равномерное распределение \(P(1)=P(2)=P(3)=1/3\), то \(E[(X - \mu)^3] = (-1)^3(1/3) + 0^3(1/3) + 1^3(1/3) = -1/3 + 0 + 1/3 = 0\). Асимметрия равна 0.
Реализация:
import numpy as np
from scipy.stats import skew # scipy предоставляет готовую функцию
X = np.array([1, 2, 3])
# Для данных напрямую:
skewness_val = skew(X) # По умолчанию использует скорректированную оценку
# Или по определению (используя несмещенную оценку ст.откл.):
mu = np.mean(X)
sigma = np.std(X, ddof=1) # ddof=1 для несмещенной оценки
if sigma > 0:
skewness_def = np.mean(((X - mu) / sigma)**3)
# Примечание: эта формула дает смещенную оценку. Для несмещенной нужны поправки.
else:
skewness_def = 0
2.18. Эксцесс (Kurtosis)
\[ \text{Kurtosis}(X) = \frac{E[(X - \mu)^4]}{\sigma^4} \]Объяснение: Эксцесс измеряет "островершинность" или "тяжесть хвостов" распределения вероятностей. Высокий эксцесс указывает на тяжелые хвосты, низкий — на легкие хвосты. Часто сравнивают с эксцессом нормального распределения (который равен 3), используя "избыточный эксцесс" = Эксцесс - 3.
Пример: Для \(X = \{1, 2, 3\}\) со средним \(\mu = 2\) и стандартным отклонением \(\sigma \approx 0.816\). Вычислить Эксцесс(X), используя четвертый центральный момент. \(E[(X - \mu)^4] = (1-2)^4 P(1) + (2-2)^4 P(2) + (3-2)^4 P(3)\). Если \(P(i)=1/3\), то \(E[(X - \mu)^4] = (-1)^4(1/3) + 0^4(1/3) + 1^4(1/3) = 1/3 + 0 + 1/3 = 2/3\). \(\sigma^4 = (\sqrt{2/3})^4 = (2/3)^2 = 4/9\). Эксцесс \( = (2/3) / (4/9) = (2/3) * (9/4) = 18/12 = 3/2 = 1.5\). (Избыточный эксцесс = 1.5 - 3 = -1.5).
Реализация:
import numpy as np
from scipy.stats import kurtosis # Возвращает избыточный эксцесс (Fisher's definition)
X = np.array([1, 2, 3])
# Используя scipy:
kurtosis_val = kurtosis(X, fisher=True) # fisher=True (по умолч.) -> избыточный эксцесс
kurtosis_pearson = kurtosis(X, fisher=False) # fisher=False -> Эксцесс Пирсона (как в формуле)
# Или по определению (используя несмещенную оценку ст.откл.):
mu = np.mean(X)
sigma = np.std(X, ddof=1)
if sigma > 0:
kurtosis_def = np.mean(((X - mu) / sigma)**4)
# Примечание: это не несмещенная оценка.
else:
kurtosis_def = 0 # Или другое значение
2.19. Бинарная перекрестная энтропия (частный случай)
\[ \text{BCE}(y, \hat{y}) = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] \]Объяснение: Бинарная перекрестная энтропия — это функция потерь, используемая для задач бинарной классификации. Она измеряет расхождение между предсказанными вероятностями (\(\hat{y}\)) и истинными метками (\(y\)).
Пример: Для \(y = [1, 0]\) и \(\hat{y} = [0.8, 0.2]\), вычислить BCE \( = -\frac{1}{2} [ (1 \cdot \log(0.8) + (1-1) \log(1-0.8)) + (0 \cdot \log(0.2) + (1-0) \log(1-0.2)) ] = -\frac{1}{2} [\log(0.8) + \log(0.8)] = -\log(0.8) \approx 0.223\). (Примечание: В исходном примере формула была \(-\frac{1}{2}(\log(0.8) + \log(0.8))\), что совпадает с результатом. Если же имелось в виду \(-\frac{1}{2}(\log(0.8) + \log(1-0.2))\) по формуле, результат тот же).
Реализация:
import numpy as np
y = np.array([1, 0])
y_hat = np.array([0.8, 0.2])
# Добавляем малое число epsilon для избежания log(0)
epsilon = 1e-15
y_hat = np.clip(y_hat, epsilon, 1 - epsilon)
bce = -np.mean(y * np.log(y_hat) + (1 - y) * np.log(1 - y_hat))
2.20. Дисперсия (Альтернативная формула)
\[ \text{Var}(X) = E[X^2] - (E[X])^2 \]Объяснение: Альтернативная формула для дисперсии использует разницу между математическим ожиданием квадрата X и квадратом математического ожидания X. Этот метод часто более эффективен вычислительно.
Пример: Для \(X = \{1, 2, 3\}\), предположим равномерное распределение \(P(i)=1/3\). Вычислить \(E[X^2] = \frac{1^2 + 2^2 + 3^2}{3} = \frac{1 + 4 + 9}{3} = \frac{14}{3} \approx 4.67\). \(E[X] = \frac{1+2+3}{3} = 2\). \((E[X])^2 = 2^2 = 4\). Тогда \(\text{Var}(X) = \frac{14}{3} - 4 = \frac{14 - 12}{3} = \frac{2}{3} \approx 0.67\).
Реализация:
import numpy as np
X = np.array([1, 2, 3])
# Для набора данных напрямую:
E_X2 = np.mean(X**2)
E_X = np.mean(X)
variance = E_X2 - E_X**2 # Это дисперсия генеральной совокупности (или смещенная выборочная)
# Для несмещенной выборочной дисперсии используйте np.var(X, ddof=1)
variance_unbiased = np.var(X, ddof=1)