【问题标题】:Measuring distance between vectors测量向量之间的距离
【发布时间】:2013-10-03 14:14:22
【问题描述】:

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

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

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

抱歉,这个问题很弱,但我必须从某个地方开始......

谢谢!

【问题讨论】:

    标签: probability euclidean-distance cosine-similarity


    【解决方案1】:

    如果您的向量本质上非常稀疏并且它们是二元的,则可以使用 Hamming 或 Hellinger 距离。当你的向量维度很大时,避免使用欧几里得(参考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 了解距离/相似性度量的调查,尽管本文将其限制为一对概率分布。

    【讨论】:

      【解决方案2】:

      您的问题不太清楚,您是在寻找向量之间的距离度量,还是寻找有效找到最近邻居的算法?

      如果您的向量仅包含数字类型,例如双精度数或整数,您可以使用 kd-tree 等结构有效地找到最近邻。 (因为您只是在查看 d 维空间中的点)。其他方法见http://en.wikipedia.org/wiki/Nearest_neighbor_search

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

      【讨论】: