Ответ
В машинном обучении и статистике я часто работаю со следующими распределениями:
Дискретные распределения:
- Распределение Бернулли: Моделирует одно испытание с двумя исходами (успех/неудача). Параметр — вероятность успеха
p.from scipy.stats import bernoulli # Моделируем 10 подбрасываний монеты с p=0.5 data = bernoulli.rvs(p=0.5, size=10) - Биномиальное распределение: Описывает количество успехов в
nнезависимых испытаниях Бернулли. Параметры:n(число испытаний) иp(вероятность успеха).from scipy.stats import binom # Вероятность получить ровно 7 орлов в 10 подбрасываниях честной монеты prob = binom.pmf(k=7, n=10, p=0.5) - Распределение Пуассона: Используется для моделирования числа редких событий, происходящих за фиксированный интервал времени или пространства. Параметр
λ(лямбда) — среднее количество событий.from scipy.stats import poisson # Моделируем число кликов на баннер за час (λ=5) clicks = poisson.rvs(mu=5, size=100)
Непрерывные распределения:
- Нормальное (Гауссово) распределение: Фундаментальное распределение, описывающее многие природные процессы. Параметры:
μ(среднее) иσ(стандартное отклонение).import numpy as np # Генерация данных и оценка параметров data = np.random.normal(loc=100, scale=15, size=1000) sample_mean = np.mean(data) sample_std = np.std(data) - Равномерное распределение: Все значения в заданном интервале
[a, b]равновероятны.# Генерация случайной точки на отрезке [0, 1] point = np.random.uniform(low=0.0, high=1.0) - Экспоненциальное распределение: Моделирует время между событиями в пуассоновском процессе. Параметр
λ— интенсивность (обратное среднему времени).from scipy.stats import expon # Моделируем время между запросами к серверу (среднее время = 2 сек) times = expon.rvs(scale=2, size=50)
Выбор распределения зависит от природы данных и решаемой задачи. Например, для ошибок регрессии часто предполагают нормальность, а для подсчета событий — Пуассона.
Ответ 18+ 🔞
Давай разжую тебе эту тему про распределения, а то смотрю, глаза уже стекленеют. Сидишь и думаешь: «Ну ёпта, опять эти формулы, какого хуя?». А на самом деле всё проще, чем кажется, если не забивать голову терминами, а представить на живых примерах.
Вот смотри, есть у нас два главных лагеря. Первые — дискретные. Это как будто ты считаешь что-то целое, поштучно. Не полтора человека, а либо один, либо ноль.
-
Распределение Бернулли. Вообще примитив до безобразия. Представь одно действие с двумя исходами. Кинул монетку один раз — либо орёл (успех), либо решка (неудача). Весь его смысл — в одной цифре
p, вероятности этого успеха. Вот и вся магия.from scipy.stats import bernoulli # Смоделируем 10 подбрасываний монетки, где орёл выпадает с шансом 0.5 data = bernoulli.rvs(p=0.5, size=10)Получишь просто последовательность нулей и единиц. Волнение ебать — а вдруг все единицы? Хотя с p=0.5 скорее пиздец какой-то бардак будет.
-
Биномиальное распределение. А вот это уже интереснее. Это когда ты ту же монетку кидаешь не один раз, а несколько, и тебе важно, сколько именно раз выпал орёл. Параметры:
n— сколько раз кидаем,p— шанс орла за один бросок.from scipy.stats import binom # Какова вероятность, что из 10 бросков честной монеты ровно 7 будут орлами? prob = binom.pmf(k=7, n=10, p=0.5)Считаешь — и понимаешь, что вероятность не такая уж и большая. Сам от себя охуел, когда впервые посчитал.
-
Распределение Пуассона. Любимое распределение всех, кто считает редкие события. Допустим, у тебя сайт, и в среднем (
λ) за час приходит 5 кликов по баннеру. Но в один час может прийти 2, в другой — 8. Пуассон как раз описывает, как вероятности размазаны вокруг этого среднего.from scipy.stats import poisson # Смоделируем, сколько кликов будет за час, если в среднем их 5. Сделаем 100 таких "часов". clicks = poisson.rvs(mu=5, size=100)Глянешь на результат — и видишь, что чаще всего действительно около пяти, но иногда выскакивают значения и побольше. Удивление пиздец — а оно в реальности так и работает.
Теперь второй лагерь — непрерывные. Тут уже не целые числа, а любые, дробные. Как температура или время.
-
Нормальное распределение (Гауссово). Царь и бог всех распределений, ёперный театр. Его колокольчик видели все, даже те, кто про статистику не слышал. Оно описывает кучу всего в природе: рост людей, ошибки измерений, твой IQ (шутка). Параметры:
μ— где центр этой горки (среднее),σ— насколько она размазана (разброс).import numpy as np # Сгенерируем данные роста для 1000 человек: средний рост 100 см, разброс 15 см. data = np.random.normal(loc=100, scale=15, size=1000) sample_mean = np.mean(data) # Посчитаем выборочное среднее sample_std = np.std(data) # И выборочное стандартное отклонениеЕсли построишь гистограмму, увидишь тот самый ровный колокол. Красота, бля.
-
Равномерное распределение. Самое честное и простое. Все значения на отрезке от
aдоbимеют абсолютно равные шансы. Как будто крутишь рулетку.# Выберем случайную точку на отрезке от 0 до 1. Абсолютно любую с одинаковым шансом. point = np.random.uniform(low=0.0, high=1.0)Доверия ебать ноль — потому что может выпасть что угодно, и никаких предпочтений.
-
Экспоненциальное распределение. Оно про время ожидания. Например, время между кликами на том же сайте или время до поломки прибора. Параметр
λ— это интенсивность, грубо говоря, как часто события в среднем происходят.from scipy.stats import expon # Смоделируем время между запросами к серверу, если в среднем запрос приходит раз в 2 секунды. times = expon.rvs(scale=2, size=50)Получишь кучу чисел. И заметишь важную вещь: маленькие промежутки (вроде 0.1 сек) будут встречаться часто, а вот ждать очередной запрос 10 секунд — ни хуя себе редкое событие.
А теперь главное, чувак. Весь цирк с выбором распределения — это не просто так. Это фундамент. Если ты моделируешь счётчик (сколько раз что-то случилось) — смотри в сторону Пуассона или Бинома. Если работаешь с ошибками, которые должны быть симметричны вокруг нуля — тебе в гости к Нормальному. Если моделируешь время до какого-то события — Экспоненциальное твой друг. Выбрал не то — и вся твоя модель пойдёт по пизде, как та мартышлюшка на скользком полу.