Wasserstein距离(最优传输距离:

wasserstein距离(最优传输距离:

Wasserstein Distance也称为推土机距离(Earth Mover’s distance, EMD),Wasserstein Distance的定义是评估由P分布转换成Q分布所需要的最小代价(移动的平均距离的最小值)→和挖东墙补西墙类似(把一个形状转换成另一个形状所需要做的最小工),所以经常查到Wasserstein Distance称为推土机距离。

Wasserstein Distance范例1:

假设有两个分布P分布和Q分布,这里用离散的分布介紹,(假设x1→x2、x2→x3、x3→x4、x4→x5距离都是1)
在这里插入图片描述P和Q的分布状况
这里举3个不同移动的方式,将P移动成Q

方法1:

在这里插入图片描述

方法2:

在这里插入图片描述

方法3:

在这里插入图片描述
三个方法的移动动量都是8。这是个简单的范例应该没有更短的移动方式,所以此范例的Wasserstein Distance/EMD = 8,但实际上Wasserstein Distance/ EMD计算要进行标准化去移动(考虑总数14个): 所以Wasserstein Distance = 8/14=4/7= 0.5714

python程序(利用scipy函数)计算

import scipy.stats
import numpy as np

P = np.array([3,5,2,1,3])
Q = np.array([2,3,4,5,0])
dists=[i for i in range(len(P))]
D=scipy.stats.wasserstein_distance(dists,dists,P,Q)
print(D)

ANS: 0.5714285714285714

实际上P和Q的分布是长得像下图,所以在用scipy计算Wasserstein Distance输入项,前两项是在看在X轴的位置,所以我用[0,1,2,3,4]作为前两项输入,來计算Wasserstein Distance。

在这里插入图片描述

Wasserstein Distance范例2:

假设有两个分布P分布和Q分布,这里用离散的分布介紹,(假设x1→x2、x2→x3、x3→x4、x4→x5、x5→x6距离都是1)

在这里插入图片描述在这里插入图片描述
这里举例一种移动的方式,将P移动成Q

在这里插入图片描述
移动动量都是12。这是个简单的范例应该沒有更短的移动方式,此范例计算要标准化去移动(考虑总数4个): 所以Wasserstein Distance = 12/4=3

python程序计算

import scipy.stats
import numpy as np

P = np.array([1,2,1])
Q = np.array([1,2,1])
dists_P=[0,1,2]
dists_Q=[3,4,5]
D1=scipy.stats.wasserstein_distance(dists_P, dists_Q, P, Q)
print(D1)

ANS: 3.0

实际上P和Q的分布是长得像下图,所以在用scipy计算Wasserstein Distance输入项,前两项是在看在X轴的位置,所以在P分布用[0,1,2],Q分布是用[4, 5, 6]作为前两项输入,来计算Wasserstein Distance。

在这里插入图片描述

聪明的你应该发现了:

推土法的移动我在范例一中可以找到3种不同移动方式(范例二其实也可以我懒了),所以没有固定的移动方式都可以找到最小的移动量,前面两各范例都提到“这是各简单的范例应该没有更短的移动方式”,那是因为范例简单,如果实际的分布超级复杂我们怎么这样慢慢移动用肉眼找到最小解。


Wasserstein Distance公式

wasserstein距离(Earth Mover’s Distance)公式:

从P分布移动到Q分布,假设P有M堆土(在P的第i堆有pi质量的土),Q有N堆土(在Q的第j堆还能存放qj质量的土)。

在这里插入图片描述

d_ij表示从P的第i堆移动到Q的第j堆的距离。(成本函数,已知)
f_ij表示从P的第i堆移动到Q的第j堆的土的质量。(控制变量,待求,待优化)

在这里插入图片描述

所以从P移动到Q的总花费为

在这里插入图片描述

<D,F>_F为计算D和F的弗罗贝尼乌斯系数(Frobenius Norm)

wasserstein距离就是求最小的P移动到Q所花费的成本。

在这里插入图片描述

求wasserstein距离有一些限制条件:

  1. f i j > 0 f_{ij}>0 fij>0,即只能从P移动到Q不能反向
  2. ∑ j = 1 N f i j < = p i \sum_{j=1}^{N}f_{ij}<=p_i j=1Nfij<=pi,每次最多转移P第i堆已有的土量
  3. ∑ i = 1 M f i j < = q j \sum_{i=1}^{M}f_{ij}<=q_j i=1Mfij<=qj,每次最多转移Q的每个土堆最大的存放量

所以在目标函数与限制都满足的状态下,找到的最佳F* (最小化P移动到Q所花费的移动次数和量)就是我们要求的wasserstein距离,即EMD,

在这里插入图片描述

我们看一下前面范例一的方法1写成方程式会长什么样,

在这里插入图片描述

在这里插入图片描述

假设这个解(F*)最好:

在这里插入图片描述

当然有些文章会用下面两种方式定义Wasserstein distance

  1. 假设有量分布P和Q

在这里插入图片描述

所以在某联合分布下,此分布下求的所有x和y的距离期望值,而这个期望值的下界(infimum,也就是方程式內的inf)就是的Wasserstein distance。

1. Scipy定义的1D分布的Wasserstein distance

The first Wasserstein distance between distribution u and v:

在这里插入图片描述

在这里插入图片描述

在scipy定义的1D的Wasserstein distance,其实为(1)方程式利用期望值式子展开后的结果。其实Wasserstein distance可以从累积分布函数(Cumulative Distribution Function、CDF)來计算。

我们用CDFs的方式来计算前两个范例的Wasserstein distanc给大家看

范例1:

在这里插入图片描述

在这里插入图片描述

所以此范例基于CDF(累积分布函数)计算的Wasserstein distance 。(我们算完再除上总数14个)

在这里插入图片描述

范例2

在这里插入图片描述

在这里插入图片描述

所以此范例基于CDF(累积分布函数)计算的Wasserstein distance (我们算完再除上总数4个)

在这里插入图片描述

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值