scipy.stats.

wasserstein_distance#

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

計算兩個 1D 離散分佈之間的 Wasserstein-1 距離。

Wasserstein 距離,也稱為 Earth mover’s distance 或最佳傳輸距離,是兩個機率分佈之間的相似性度量 [1]。在離散情況下,Wasserstein 距離可以理解為將一個分佈轉換為另一個分佈的最佳傳輸計畫的成本。成本計算為移動的機率質量的大小與其移動的距離的乘積。簡潔直觀的介紹可以在 [2] 中找到。

在 1.0.0 版本中新增。

參數:
u_values1d array_like

來自機率分佈的樣本或機率分佈的支持(所有可能值的集合)。每個元素都是觀察值或可能值。

v_values1d array_like

來自第二個分佈的樣本或支持。

u_weights, v_weights1d array_like, optional

與樣本相對應的權重或計數,或與支持值相對應的機率質量。元素總和必須為正數且有限。如果未指定,則每個值都分配相同的權重。

返回:
distancefloat

分佈之間計算出的距離。

另請參閱

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)\) 給出位置 \(x\)\(u\) 的機率,\(v(x)\) 也是如此。

如果 \(U\)\(V\) 分別是 \(u\)\(v\) 的 CDF,則此距離也等於

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

有關這兩個定義的等價性證明,請參閱 [3]

輸入分佈可以是經驗性的,因此來自樣本,樣本的值實際上是函數的輸入,或者它們可以被視為廣義函數,在這種情況下,它們是位於指定值的狄拉克 delta 函數的加權和。

參考文獻

[2]

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

[3]

Ramdas, Garcia, Cuturi “On Wasserstein Two Sample Testing and Related Families of Nonparametric Tests” (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