测量矢量之间的距离

时间:2013-09-27 10:06:07

标签: probability euclidean-distance cosine-similarity

我有一组300.000左右的向量,我想以某种方式进行比较,给定一个向量,我希望能够找到最接近的向量,我想到了三种方法。

  • 简单的欧几里德距离
  • 余弦相似度
  • 使用内核(例如Gaussian)来计算Gram矩阵。
  • 将向量视为离散概率分布(这使得 有意义的事情)并计算一些分歧度量。

我真的不明白何时做一个而不是另一个有用。我的数据有很多零元素。考虑到这一点,对于这三种方法中哪一种最好,是否有一些一般的大拇指?

对于这个弱问题感到抱歉,但我不得不从某个地方开始......

谢谢!

2 个答案:

答案 0 :(得分:0)

您的问题不是很清楚,您是在寻找矢量之间的距离度量,还是在高效查找最近邻居的算法?

如果向量只包含数字类型(如双精度或整数),则可以使用诸如kd-tree之类的结构有效地找到最近邻居。 (因为你只是看着d维空间中的点)。有关其他方法,请参阅http://en.wikipedia.org/wiki/Nearest_neighbor_search

否则,选择距离度量和算法在很大程度上取决于向量的内容。

答案 1 :(得分:0)

如果你的向量在本质上非常稀疏,如果它们是二进制的,你可以使用汉明或海林格距离。当矢量尺寸较大时,请避免使用欧几里德(参考http://en.wikipedia.org/wiki/Curse_of_dimensionality

请参考http://citeseerx.ist.psu.edu/viewdoc/download?rep=rep1&type=pdf&doi=10.1.1.154.8446进行距离/相似性度量调查,尽管该文件将其限制为概率分布对。