Ссылка для функции расстояния Вассерштейна в python - PullRequest
1 голос
/ 04 марта 2020

Мы пытаемся вычислить расстояние между двумя дискретными 1-мерными распределениями. Наша цель состоит в том, чтобы вычислить функцию расстояния, которая следует интуитивному оптимальному транспорту: наши распределения - это массы в «точках», то есть векторах, с важностью порядка элементов в каждом векторе. Учитывая матрицу, которая описывает расстояния между любыми двумя точками, мы хотели бы найти транспорт с минимальными затратами в u, чтобы сделать его v.

Простейший пример: Пусть u, v - распределения : u = (0,5,0,2,0,3), v = (0,5,0,3,0.2)

Предположим, что матрица расстояний равна [[1,1,1], [1,1,1], [1,1,1]] , что означает, что стоит 1 перемещать единицу массы между любыми двумя точками. очевидно, оптимальный способ заставить вас выглядеть как v - это перенести 0.1 из третьей точки во вторую. Стоимость в этом случае будет 1 * 0,1, что составляет 0,1.

Следуя этой интуиции, мы повернули на расстояние Вассерштейна. Мы пробовали и scipy.stats.wasserstein_1d , и пакет POT - в частности, ot.emd2. Однако на самом деле никто не вычисляет то, что мы хотим, что касается приведенного выше примера, первый не учитывает порядок элементов в векторе, поэтому результат равен 0. Второй алгоритм возвращает 1

. объяснение, которое мы могли пропустить в отношении работы этих двух python функций, или любые другие ссылки или предложения.

  • Нам известен тот факт, что при несимметричном c расстоянии метри c это понятие "расстояния" не будет симметричным c.
...