scipy.stats.wasserstein_distance

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

计算两个一维分布之间的第一个Wasserstein距离。

这个距离也称为推土机的距离,因为它可以看作是变换所需的最小“功” \(u\) 变成 \(v\) ,其中“功”是用必须移动的分布权重的量乘以它必须移动的距离来测量的。

1.0.0 新版功能.

参数
u_values, v_valuesarray_like

在(经验)分布中观察到的值。

u_weights, v_weightsARRAY_LIKE,可选

每个值的权重。如果未指定,则为每个值指定相同的权重。 u_weights (请回复。 v_weights )的长度必须与 u_values (请回复。 v_values )。如果权重和不同于1,则它必须仍然是正数和有限的,以便可以将权重规格化为和为1。

退货
distance浮动

计算的分布之间的距离。

注意事项

分布之间的第一Wasserstein距离 \(u\)\(v\) 是:

\[L_1(u,v)=\inf_{\pi\in\Gamma(u,v)}\int_{\mathbb{R}\次 \mathbb{R}}|x-y|\mathm{d}\pi(x,y)\]

哪里 \(\Gamma (u, v)\) 上的(概率)分布集 \(\mathbb{{R}} \times \mathbb{{R}}\) 其边缘是 \(u\)\(v\) 分别对第一个和第二个因素进行分析。

如果 \(U\)\(V\) 是各自的CDF \(u\)\(v\) ,此距离也等于:

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

看见 [2] 以证明这两个定义的等价性。

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

参考文献

1

“沃瑟斯坦公制”,https://en.wikipedia.org/wiki/Wasserstein_metric

2

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