3

我们试图计算两个离散的一维分布之间的距离。我们的目的是计算一个遵循最优传输直觉的距离函数:我们的分布是“点”处的质量,即向量,对每个向量中元素的顺序很重要。给定一个描述任意两点之间距离的矩阵,我们想在 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。显然,使 u 看起来像 v 的最佳方法是将 0.1 从第三点传输到第二点。在这种情况下,成本将为 1*0.1,即 0.1。

按照这种直觉,我们转向了 Wasserstein 距离。我们已经尝试过scipy.stats.wasserstein_1dPOT包 - 特别是 ot.emd2。然而,没有人真正计算出我们想要的,关于上面的例子,第一个不考虑向量中元素的顺序,所以结果是 0。第二个算法返回 1

我们非常感谢我们可能错过的关于这两个 python 函数的操作的任何解释,或者任何其他参考或建议。

  • 我们知道,给定一个非对称距离度量,这个“距离”的概念将不是对称的。
4

1 回答 1

3

对于所有权重均为 1 的情况,Wasserstein 距离将通过执行以下操作产生您正在查看的测量值。

from scipy import stats

u = [0.5,0.2,0.3]
v = [0.5,0.3,0.2]

# create and array with cardinality 3 (your metric space is 3-dimensional and
# where distance between each pair of adjacent elements is 1
dists = [i for i in range(len(w1))]

stats.wasserstein_distance(dists, dists, u, v)

此代码将您所谓的“分布”视为具有值的分布的权重[0,1,2]。用简单的图形术语来说,您的示例分布在我的处理中看起来像这样。

  u         v

|         |
|         |
|   |     | |
| | |     | | |
| | |     | | |
-----     -----
0 1 2     0 1 2
于 2020-06-12T14:00:44.260 回答