我们试图计算两个离散的一维分布之间的距离.我们的目的是计算一个距离函数,它遵循最优运输的直觉:我们的分布是“点”上的质量,即向量,其重要性在于每个向量中元素的顺序。给定一个矩阵来描述任意两点之间的距离,我们希望找到u中最小成本的运输方式,以便使之成为v.
最简单的例子是: u,v是分布:u=(0.5,0.2),v=(0.5,0.3)
假定距离矩阵为[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函数的操作,或者任何其他引用或建议,我们都会非常感激。
发布于 2020-06-12 14:00:44
对于所有权重为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 2https://stackoverflow.com/questions/60529232
复制相似问题