scipy.stats.

wasserstein_distance#

scipy.stats.wasserstein_distance(u_values, v_values, u_weights=None, v_weights=None)[источник]#

Вычисляет расстояние Вассерштейна-1 между двумя одномерными дискретными распределениями.

Расстояние Вассерштейна, также называемое расстоянием землекопа или расстоянием оптимального транспорта, является метрикой сходства между двумя распределениями вероятностей [1]. В дискретном случае расстояние Вассерштейна можно понимать как стоимость оптимального плана транспортировки для преобразования одного распределения в другое. Стоимость рассчитывается как произведение перемещаемой вероятностной массы и расстояния, на которое она перемещается. Краткое и интуитивное введение можно найти на [2].

Добавлено в версии 1.0.0.

Параметры:
u_values1d array_like

Выборка из вероятностного распределения или носитель (множество всех возможных значений) вероятностного распределения. Каждый элемент является наблюдением или возможным значением.

v_values1d array_like

Выборка из или носитель второго распределения.

u_weights, v_weights1d array_like, опционально

Веса или количества, соответствующие выборке, или вероятностные массы, соответствующие значениям поддержки. Сумма элементов должна быть положительной и конечной. Если не указано, каждому значению присваивается одинаковый вес.

Возвращает:
расстояниеfloat

Вычисленное расстояние между распределениями.

Смотрите также

wasserstein_distance_nd

Вычислить расстояние Вассерштейна-1 между двумя N-мерными дискретными распределениями.

Примечания

Даны две одномерные функции вероятностных масс, \(u\) и \(v\), первое расстояние Вассерштейна между распределениями:

\[l_1 (u, v) = \inf_{\pi \in \Gamma (u, v)} \int_{\mathbb{R} \times \mathbb{R}} |x-y| \mathrm{d} \pi (x, y)\]

где \(\Gamma (u, v)\) является множеством (вероятностных) распределений на \(\mathbb{R} \times \mathbb{R}\) чьи маргиналы являются \(u\) и \(v\) по первому и второму факторам соответственно. Для заданного значения \(x\), \(u(x)\) даёт вероятность \(u\) в позиции \(x\), и то же самое для \(v(x)\).

Если \(U\) и \(V\) являются соответствующими функциями распределения (CDF) для \(u\) и \(v\), это расстояние также равно:

\[l_1(u, v) = \int_{-\infty}^{+\infty} |U-V|\]

См. [3] для доказательства эквивалентности обоих определений.

Входные распределения могут быть эмпирическими, следовательно, полученными из выборок, чьи значения фактически являются входными данными функции, или они могут рассматриваться как обобщённые функции, в этом случае они являются взвешенными суммами дельта-функций Дирака, расположенных в указанных значениях.

Ссылки

[1]

«Метрика Вассерштейна», https://en.wikipedia.org/wiki/Wasserstein_metric

[2]

Lili Weng, "Что такое расстояние Вассерштейна?", Lil'log, https://lilianweng.github.io/posts/2017-08-20-gan/#what-is-wasserstein-distance.

[3]

Ramdas, Garcia, Cuturi "On Wasserstein Two Sample Testing and Related Families of Nonparametric Tests" (2015). arXiv:1509.02237.

Примеры

>>> from scipy.stats import wasserstein_distance
>>> wasserstein_distance([0, 1, 3], [5, 6, 8])
5.0
>>> wasserstein_distance([0, 1], [0, 1], [3, 1], [2, 2])
0.25
>>> wasserstein_distance([3.4, 3.9, 7.5, 7.8], [4.5, 1.4],
...                      [1.4, 0.9, 3.1, 7.2], [3.2, 3.5])
4.0781331438047861