Случайные величины, матожидание и дисперсия
Математическое ожидание — это «среднее в долгую», а дисперсия — мера того, насколько случайная величина разбросана вокруг него.
Случайная величина — число, зависящее от случайного исхода (например, очки на кости). Матожидание E[X] — среднее значение, взвешенное по вероятностям. Дисперсия Var[X] — средний квадрат отклонения от E[X].
Случайная величина
Случайная величина превращает исходы эксперимента в числа. Бросок кости → число очков. Выигрыш в лотерее → сумма. Высота человека → рост. С такими числами можно делать арифметику: усреднять, измерять разброс. Это мостик от «событий» к «числам», на котором стоит вся статистика.
Матожидание: среднее, взвешенное по вероятностям
Матожидание E[X] — это то, к чему сходится среднее значение в длинной серии (вспомните закон больших чисел). Считается как сумма «значение × его вероятность». Для честной кости: (1+2+3+4+5+6)/6 = 3.5. Заметьте: само значение 3.5 на кости невозможно — матожидание не обязано быть достижимым исходом, это «центр тяжести» распределения.
# E[X] для честной кости
values = [1, 2, 3, 4, 5, 6]
probs = [1/6] * 6
E = sum(v * p for v, p in zip(values, probs))
print("E[X] кости =", E)
# Несимметричная случайная величина: лотерея
# выигрыш 100 с вер. 0.01, иначе 0
E_lottery = 100 * 0.01 + 0 * 0.99
print("E[выигрыш] лотереи =", E_lottery)
Вывод:
E[X] кости = 3.5 E[выигрыш] лотереи = 1.0
Дисперсия: насколько широк разброс
Матожидание не всё рассказывает: две величины с одинаковым средним могут вести себя совсем по-разному. Дисперсия измеряет разброс: средний квадрат отклонения от матожидания, Var[X] = E[(X − E[X])²]. Квадрат, чтобы отклонения в обе стороны не сокращались. Корень из дисперсии — стандартное отклонение — возвращает разброс в исходные единицы.
import math
values = [1, 2, 3, 4, 5, 6]
probs = [1/6] * 6
E = sum(v * p for v, p in zip(values, probs))
Var = sum((v - E) ** 2 * p for v, p in zip(values, probs))
std = math.sqrt(Var)
print("E[X] =", E)
print("Var[X] =", round(Var, 4))
print("Стандартное отклонение =", round(std, 4))
Вывод:
E[X] = 3.5 Var[X] = 2.9167 Стандартное отклонение = 1.7078
Проверка симуляцией
Бросим кость много раз и убедимся, что среднее и разброс наших бросков сходятся к теоретическим E[X] = 3.5 и Var[X] ≈ 2.92.
import random, statistics
random.seed(10)
rolls = [random.randint(1, 6) for _ in range(200000)]
print("Среднее по броскам =", round(statistics.mean(rolls), 4))
print("Дисперсия по броскам =", round(statistics.pvariance(rolls), 4))
Вывод:
Среднее по броскам = 3.4978 Дисперсия по броскам = 2.9124
Эмпирические среднее и дисперсия почти совпали с теоретическими — теория работает.
Зачем это в ML
Матожидание и дисперсия пронизывают всё обучение. Функция потерь — это матожидание ошибки. Дисперсия предсказаний модели — про переобучение (модель с высокой дисперсией слишком чувствительна к данным). Знаменитый компромисс смещение-дисперсия (bias-variance) — про баланс этих двух величин. А нормализация признаков — это приведение к нулевому среднему и единичной дисперсии.
Итог
- Случайная величина — число, зависящее от случайного исхода.
- Матожидание E[X] — среднее, взвешенное по вероятностям; «центр» распределения.
- Дисперсия Var[X] = E[(X − E[X])²] — мера разброса; её корень — стандартное отклонение.
- В ML потеря — это матожидание ошибки, а дисперсия связана с переобучением.