首发于 算法加油站
写文章
常见的距离算法和相似度计算方法

常见的距离算法和相似度计算方法

91 人 赞同了该文章

注:不定时更新

1.常见的距离算法

1.1 欧几里得距离(Euclidean Distance

[公式]

在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。使用这个距离,欧氏空间成为度量空间。相关联的范数称为欧几里得范数。

Euclidean Distance是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。

代码:

>>> pdist = nn.PairwiseDistance(p=2)
>>> input1 = torch.randn(100, 128)
>>> input2 = torch.randn(100, 128)
>>> output = pdist(input1, input2)

1.2 Earth Mover's Distance (EMD距离)

和欧式距离一样,它们都是一种距离度量的定义、可以用来测量某两个分布之间的距离。EMD主要应用在图像处理和语音信号处理领域。

EMD问题通俗解释: Earth Move翻译过来是搬土,指把P位置的m个坑的土,用最小的代价搬到Q位置的n个坑中,dij是pi到qj两个坑的距离,fij是从pi搬到qj的土量,则WORK工作量就是要最小化的目标。线性规划求解出fij后,再用fij对WORK作个归一化,就得到了EMD。EMD 实际上是线性规划中运输问题的最优解。

EMD具体定义可参考:
EMD homepages.inf.ed.ac.uk图标
C代码包 emd.h, emd.c, emd.i