多元 Wasserstein 度量nn-方面

机器算法验证 多元分析 距离 公制 瓦瑟斯坦
2022-03-29 07:38:54

我是一名植被生态学家和计算机科学的穷学生,最近了解了 Wasserstein 度量。我发现将此度量应用于一维分布相当直观,并且检查 R 中传输包中的 wasserstein1d 函数有助于我理解它的计算,以下行对我的理解最关键:

mean(abs(sort(b) - sort(a))^p)^(1/p)

在两个向量 a 和 b 长度不等的情况下,该函数似乎会进行插值,在每个向量中插入值,这些值是源数据的副本,直到长度相等。

我的问题与将 Wasserstein 度量扩展到 n 维分布有关。使用 R 中生成的以下 7d 示例数据集:

d <- 7
obs <- 100

d7a <- matrix(nrow = obs, ncol = d, data = 0)
d7b <- matrix(nrow = obs, ncol = d, data = 0)

set.seed(123)

for(i in 1:7){
  d7a[,i] <- rnorm(obs)
  d7b[,i] <- rnorm(obs)
}

wassersteindNd(d7a, d7b) #fictitious function here

是否可以计算这个距离,R 或 python 中是否有可用的包可以做到这一点?

1个回答

一维中的Wasserstein是最优传输的一个特例Rwasserstein1d和 Pythonscipy.stats.wasserstein_distance都仅用于 1D 特殊情况。两个函数背后的算法根据它们的 cdf 对离散数据进行排序,以便移动距离和移动量相乘,以获得它们之间的对应点uv彼此最近。更多关于 1D 特殊情况的信息可以在 Peyre 和 Cuturi 的计算最优传输的备注 2.28 中找到。

一维特例比实现线性规划要容易得多,这是高维耦合必须遵循的方法。最优传输的线性规划在计算方面几乎不再比 1D Wasserstein 的排序算法更难,然而,它本身相当高效且开销低。wasserstein1d并且scipy.stats.wasserstein_distance不进行线性规划。

不过,您所问的问题可能与更高的维度没有任何关系,因为您首先说“两个向量 a 和 b 的长度不等”。如果源分布和目标分布不等长,这并不是真正的高维问题(毕竟只有“两个向量a和b”),而是分布不平衡的问题(即“不等长”) ,这本身就是另一个可能承认 Wasserstein 优化困难的最优传输的特殊情况。当然,已经开发了一些处理不平衡最优传输的变通方法。

如果它确实是您所追求的高维、多元传输(不一定是不平衡的 OT),那么您不应该进一步追求您尝试的代码,因为您显然只是在尝试扩展 Wasserstein 的一维特例,而实际上您不能将该一维特殊情况扩展到多变量设置而是研究线性规划。对于初学者来说,Python 中的pot包是众所周知的,其文档涉及 1D 特殊情况、2D、不平衡 OT、离散到连续等等。