реализация scipy.stats.wasserstein_distance

Я пытаюсь понять реализацию, которая используется в scipy.stats.wasserstein_distance

за p=1 и без весов, с u_values, v_values два одномерных распределения, код сводится к

u_sorter = np.argsort(u_values) (1)
v_sorter = np.argsort(v_values)

all_values = np.concatenate((u_values, v_values)) (2)
all_values.sort(kind='mergesort')

deltas = np.diff(all_values) (3)

u_cdf_indices = u_values[u_sorter].searchsorted(all_values[:-1], 'right') (4)
v_cdf_indices = v_values[v_sorter].searchsorted(all_values[:-1], 'right')

v_cdf = v_cdf_indices / v_values.size (5)
u_cdf = u_cdf_indices / u_values.size

return np.sum(np.multiply(np.abs(u_cdf - v_cdf), deltas)) (6)

Какова причина этой реализации, есть ли литература? Я просмотрел процитированную статью, которая, как мне кажется, объясняет, почему вычисление расстояния Вассерштейна в его общем определении в 1D эквивалентно вычислению интеграла,


\int_{-\infty}^{+\infty} |U-V|,

с U и V кумулятивные функции распределения для распределений u_values а также v_values,
но я не понимаю, как этот интеграл оценивается в scipy реализации.

В частности,
а) почему они умножаются на дельты в (6) для решения интеграла?
б) какv_cdf а также u_cdf в (5) кумулятивные функции распределения U и V?

Кроме того, с этой реализацией порядок элементов распределения u_values а также v_valuesне сохранилось. Разве это не должно быть так в общем определении расстояния Вассерштейна?

Спасибо за помощь!

1 ответ

Порядок PDF, гистограммы или KDE сохраняется и важен для расстояния Вассерштейна. Если вы передаете только u_values ​​и v_values, тогда он должен вычислить что-то вроде PDF, KDE или гистограммы. Обычно вы предоставляете PDF-файл и диапазон U и V в качестве 4 аргументов функции wasserstein_distance. Таким образом, в случае, когда предоставляются образцы, вы не передаете реальную точку данных, а просто набор повторяющихся «экспериментов». Номера 1 и 4 в вашем списке блоков кода в основном объединяют ваши данные по количеству дискретных значений. CDF - это количество дискретных значений до этой точки или P(x<X). CDF - это, по сути, совокупная сумма PDF-файла, гистограммы или KDE. Номер 5 выполняет нормализацию CDF до значений от 0,0 до 1,0 или, говоря другим способом, делит ячейку на количество ячеек.

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

Б) Это может иметь больше смысла, если вы построите CDF точки данных, такой как файл изображения, используя приведенный выше код.

Однако для задачи транспортировки может потребоваться не PDF-файл, а скорее набор данных с упорядоченными объектами или какой-либо способ измерения расстояния между объектами, и в этом случае вы бы вычислили его по-другому.

Другие вопросы по тегам