Wasserstein距离-原理及python实现

本文介绍了Wasserstein距离,又称推土机距离,作为衡量概率分布间差异的一种方法,即使分布没有重叠也能有效评估。相比于KL散度和JS散度,Wasserstein距离具有独特优势。通过一个简单的例子展示了如何将分布P转换为分布Q,并提供了相应的Python代码实现,计算了两个分布之间的Wasserstein距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 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两个分布之间的计算距离

以上就是全部内容,感谢观看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值