3

下面是我用于计算向量之间欧几里得距离的代码,以及我转换后的数据集(向量)的片段。

import itertools
import numpy as np

vect=[[2, 1, 1, 1, 1, 3, 4, 2, 5, 1],
 [1, 5, 2, 1, 1, 1, 1, 1, 1, 2],
 [2, 1, 1, 1, 2, 1, 1, 1, 1, 1]]

for u1, u2 in itertools.combinations(vect, 2):
    x = np.array(u1)
    y = np.array(u2)
    space = np.linalg.norm(y - x)
    print space

向量之间的欧几里得距离为:

7.0
5.56776436283
4.472135955

我的目标是计算向量之间的相似度,并为每次比较输出一个相似度分数。典型的相似度得分介于 0 和 1 之间,0 表示不相似,1 表示完全相似。这里的问题是如何将欧几里得距离转换为相似度分数?有人提出了这个公式:1/1+d(P1, P2) 即欧几里得距离的倒数=相似度得分。有什么建议吗?谢谢

4

1 回答 1

2

那里有很多相似性度量。正如 user2357112 所说,最好的取决于您的应用程序。我建议看看这里列出的一些内核:

http://crsouza.blogspot.co.uk/2010/03/kernel-functions-for-machine-learning.html

我发现卡方核在我的应用程序中是一个很好的默认选择——尤其是当向量是直方图时。

如果您有一个数据子集,并且您已经知道您希望哪些数据彼此相似,我建议您尝试一些不同的内核并在这些样本上绘制得到的相似度矩阵(如果您有 100 个测试样本,您会得到一个100x100 相似度矩阵,您可以使用 matplotlib.pyplot 中的 imshow 方法简单地将其绘制为热图)。

于 2013-08-09T09:44:15.093 回答