← Назад к вопросам

Какие знаешь методы оценивания схожести выборок?

2.0 Middle🔥 201 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы оценивания схожести выборок

В машинном обучении и статистике существует множество методов для сравнения распределений двух выборок. Это критически важно для контроля качества данных, валидации моделей и обнаружения дрейфа распределений.

Статистические тесты

Тест Колмогорова-Смирнова (KS-тест) — один из самых классических методов для проверки, принадлежат ли две выборки одному распределению. Он вычисляет максимальное расстояние между эмпирическими функциями распределения двух выборок. KS-тест хорошо работает для одномерных непрерывных распределений, но менее мощен для дискретных данных.

from scipy.stats import ks_2samp
statistic, p_value = ks_2samp(sample1, sample2)

Критерий Крамера-фон Мизеса — похож на KS-тест, но использует квадратичную метрику вместо максимального отклонения. Обычно более чувствителен к отличиям в хвостах распределений.

Тест Манна-Уитни (U-тест) — непараметрический тест, проверяющий, являются ли две независимые выборки из одного распределения. Основан на рангах данных, поэтому устойчив к выбросам.

from scipy.stats import mannwhitneyu
statistic, p_value = mannwhitneyu(sample1, sample2)

Информационно-теоретические метрики

Дивергенция Кульбака-Лейблера (KL-divergence) измеряет, насколько одно вероятностное распределение отличается от другого. Не симметрична: KL(P||Q) ≠ KL(Q||P). Часто используется для сравнения распределений в контексте контроля дрейфа данных.

from scipy.spatial.distance import entropy
kl_div = entropy(p, q)

Расстояние Дженсена-Шеннона — симметричная версия KL-дивергенции, основанная на среднем распределении. Более интерпретируемая и обычно используется в практических приложениях.

Расстояния между распределениями

Расстояние Вассерштейна (также называемое земным расстоянием) интерпретирует распределения как две кучи грунта и вычисляет минимальный "транспортный" стоимость для трансформации одного в другое. Очень интуитивно для работы с многомерными распределениями.

from scipy.stats import wasserstein_distance
distance = wasserstein_distance(sample1, sample2)

Расстояние Хеллингера — мера схожести, основанная на корневом произведении вероятностей. Симметрична и лежит в диапазоне [0, 1].

Методы на основе максимального среднего расхождения

Maximum Mean Discrepancy (MMD) — популярный метод в машинном обучении для сравнения распределений в пространстве высокой размерности. Измеряет разницу между средними представлениями выборок в воспроизводящем ядерном пространстве Гильберта.

def mmd(X, Y, kernel='rbf', gamma=1.0):
    # Вычисление MMD между выборками X и Y
    K_XX = np.exp(-gamma * cdist(X, X) ** 2)
    K_YY = np.exp(-gamma * cdist(Y, Y) ** 2)
    K_XY = np.exp(-gamma * cdist(X, Y) ** 2)
    
    return np.mean(K_XX) + np.mean(K_YY) - 2 * np.mean(K_XY)

Практическое применение

При проверке схожести выборок я обычно использую комбинированный подход:

  1. Первичный анализ — визуализация распределений через гистограммы и Q-Q графики
  2. Статистические тесты — KS-тест или Mann-Whitney для первой проверки
  3. Расстояние Вассерштейна — для более надежной оценки в многомерном случае
  4. MMD — когда нужна мощная проверка в пространстве высокой размерности

Выбор метода зависит от размерности данных, типа распределения и конкретной задачи.

Какие знаешь методы оценивания схожести выборок? | PrepBro