Wasserstein距离-原理及python实现
Wasserstein距离-原理及python实现
·
一 Wasserstein距离
Wasserstein Distance也称为推土机距离(Earth Mover’s distance, EMD),因为它可以被视为将 u u u分布转换为 v v v分布所需的最小 “work” 量,移动的平均距离的最小值。
Wasserstein距离相比KL散度、JS散度的优越性在于,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的远近。
二 图例解释
将P移动成Q,这是个简单的范例,移动代价(移动量*移动距离)是12,应该沒有更短的移动方式。此范例计算要标准化去移动(考虑总数4个): 所以Wasserstein Distance = 12 / 4 = 3
三 代码实现
上述图例对应的具体代码
import scipy.stats
import numpy as np
# Wasserstein距离
import scipy.stats
import numpy as np
dists_P=[0,1,2] # 分布P,可以理解为分布P在X轴上的位置
dists_Q=[3,4,5] # 同理
# dists=[i+1 for i in range(len(P))]
P = np.array([1,2,1]) # 分布P的权重,也可理解为分布P在其指定X轴位置上的权重。若果没有指定,则为1,即则为每个值分配相同的权重,可选。如果权重总和不为 1,则它仍然必须是正数和有限的,以便权重可以归一化为总和为 1。
Q = np.array([1,2,1]) # 同理
D1=scipy.stats.wasserstein_distance(dists_P, dists_Q, P, Q)
# D1=scipy.stats.wasserstein_distance(dists,dists,P,Q)
print(D1) # return两个分布之间的计算距离
以上就是全部内容,感谢观看!
更多推荐
所有评论(0)