一、Pyemd介绍
Pyemd是一个Python包,用于计算文本或向量之间的差异度分数。这个分数表示为”Earth Mover’s Distance”(EMD)。在计算机视觉、自然语言处理和模式识别等领域得到广泛的应用。
能够利用pyemd包计算EMD算法是利用线性规划来解决的。EMD的主要思想是找到从基础建筑材料把一个分布变成另一个的最小成本方法。
Pyemd包不仅能计算EMD还能计算对称Kullback-Leibler距离,针对Kullback-Leibler距离的一些扩展也可以通过使用Pyemd包实现。
二、Pyemd用法
1、安装Pyemd包
pip install pyemd
2、调用Pyemd包
首先从pyemd中导入emd包,由于EMD算法采用线性规划,因此必须安装有线性规划包lpsolve或者是cvxopt
from pyemd import emd
import numpy as np
3、使用Pyemd包
在使用Pyemd包时,需要定义源分布和目标分布。使用Pyemd包需要数据为numpy数组格式,我们可以先定义两个列表作为源分布和目标分布。
source_distribution = np.array([0.0, 0.5, 0.2, 0.0, 0.3])
target_distribution = np.array([0.3, 0.2, 0.2, 0.2, 0.1])
定义两组数据源distribution_1和distribution_2,如下所示:
distribution_1 = np.array([0.2, 0.3, 0.1, 0.4])
distribution_2 = np.array([0.1, 0.5, 0.2, 0.2])
接下来就可以使用pyemd计算源分布和目标分布之间的EMD,如下所示:
emd(source_distribution, target_distribution, normalize=True)
输出结果:0.34000000000000014
如果您愿意,可以通过在normalize参数中传递False来获得非标准ETD的未规范化算法,但大多数情况下最好保留它。在下面的示例中,另一个EMD函数将使用shuffle,它可以将源分布重新排序以匹配与目标分布的最小成本。
emd(
distribution_1,
distribution_2,
distance_matrix=distance_matrix,
normalize=True
)
输出结果:1.1800000000000002
三、Pyemd小结
本文介绍了Pyemd包是一个Python包,用于计算文本或向量之间的差异度分数,它采用线性规划方法来计算EMD算法,并可以通过numpy数组格式来计算源分布和目标分布之间的差异度分数,其算法已经在计算机视觉、自然语言处理和模式识别等领域得到广泛的应用,帮助用户快速计算并评估数据间的相似度与差异度。
原创文章,作者:JEQU,如若转载,请注明出处:https://www.506064.com/n/142021.html