scipy.stats.

wasserstein_distance#

scipy.stats.wasserstein_distance(u_values, v_values, u_weights=None, v_weights=None)[源代码]#

计算两个 1D 离散分布之间的 Wasserstein-1 距离。

Wasserstein 距离,也称为 Earth mover's 距离或最优传输距离,是两个概率分布之间的相似性度量 [1]。在离散情况下,Wasserstein 距离可以理解为将一个分布转换为另一个分布的最优传输计划的成本。成本计算为移动的概率质量的数量与其移动的距离的乘积。在 [2] 中可以找到一个简短而直观的介绍。

1.0.0 版本新增。

参数:
u_values一维类数组

来自概率分布的样本或概率分布的支撑(所有可能值的集合)。每个元素都是一个观测值或可能的值。

v_values一维类数组

来自第二个分布的样本或支撑。

u_weights, v_weights一维类数组,可选

与样本对应的权重或计数,或与支撑值对应的概率质量。元素的总和必须为正且有限。如果未指定,则每个值都分配相同的权重。

返回:
distance浮点数

计算出的分布之间的距离。

另请参阅

wasserstein_distance_nd

计算两个 N-D 离散分布之间的 Wasserstein-1 距离。

注释

给定两个 1D 概率质量函数,\(u\)\(v\),分布之间的第一个 Wasserstein 距离为

\[l_1 (u, v) = \inf_{\pi \in \Gamma (u, v)} \int_{\mathbb{R} \times \mathbb{R}} |x-y| \mathrm{d} \pi (x, y)\]

其中 \(\Gamma (u, v)\)\(\mathbb{R} \times \mathbb{R}\) 上(概率)分布的集合,其边缘分布分别在第一和第二个因子上为 \(u\)\(v\)。对于给定的值 \(x\)\(u(x)\) 给出 \(u\) 在位置 \(x\) 的概率,\(v(x)\) 也一样。

如果 \(U\)\(V\) 分别是 \(u\)\(v\) 的 CDF,则此距离也等于

\[l_1(u, v) = \int_{-\infty}^{+\infty} |U-V|\]

有关两个定义等效性的证明,请参阅 [3]

输入分布可以是经验性的,因此来自其值是函数有效输入的样本,或者它们可以被视为广义函数,在这种情况下,它们是位于指定值的狄拉克δ函数的加权和。

参考文献

[2]

Lili Weng,“什么是 Wasserstein 距离?”,Lil’log,https://lilianweng.github.io/posts/2017-08-20-gan/#what-is-wasserstein-distance

[3]

Ramdas, Garcia, Cuturi “关于 Wasserstein 双样本检验和相关非参数检验族”(2015)。arXiv:1509.02237

示例

>>> from scipy.stats import wasserstein_distance
>>> wasserstein_distance([0, 1, 3], [5, 6, 8])
5.0
>>> wasserstein_distance([0, 1], [0, 1], [3, 1], [2, 2])
0.25
>>> wasserstein_distance([3.4, 3.9, 7.5, 7.8], [4.5, 1.4],
...                      [1.4, 0.9, 3.1, 7.2], [3.2, 3.5])
4.0781331438047861