scipy.stats.

wasserstein_距离#

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

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

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

Added in version 1.0.0.

参数:
u_values1维 array_like

概率分布的样本或概率分布的支持(所有可能值的集合)。每个元素是一个观察值或可能的值。

v_values1维 array_like

来自第二个发行版的样本或支持。

u_weights, v_weights1维数组类,可选

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

返回:
距离浮动

分布之间的计算距离。

参见

wasserstein_distance_nd

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

注释

给定两个一维概率质量函数,\(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