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
- 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