我有一组 300.000 个左右的向量,我想以某种方式进行比较,并且给定一个向量,我希望能够找到我想到的三种方法中最接近的向量。
- 简单欧几里得距离
- 余弦相似度
- 使用内核(例如 Gaussian)来计算 Gram 矩阵。
- 将向量视为离散概率分布(这样做是有意义的)并计算一些散度度量。
我真的不明白什么时候做一个而不是另一个有用。我的数据有很多零元素。考虑到这一点,对于这三种方法中哪一种最好,是否有一些一般的经验法则?
抱歉这个弱问题,但我必须从某个地方开始......
谢谢!
我有一组 300.000 个左右的向量,我想以某种方式进行比较,并且给定一个向量,我希望能够找到我想到的三种方法中最接近的向量。
我真的不明白什么时候做一个而不是另一个有用。我的数据有很多零元素。考虑到这一点,对于这三种方法中哪一种最好,是否有一些一般的经验法则?
抱歉这个弱问题,但我必须从某个地方开始......
谢谢!
您的问题不太清楚,您是在寻找向量之间的距离度量,还是寻找有效找到最近邻居的算法?
如果您的向量仅包含数字类型,例如双精度数或整数,您可以使用 kd-tree 等结构有效地找到最近邻。(因为您只是在查看 d 维空间中的点)。有关其他方法,请参见http://en.wikipedia.org/wiki/Nearest_neighbor_search 。
否则,选择距离度量和算法在很大程度上取决于向量的内容。
如果您的向量本质上非常稀疏并且它们是二进制的,则可以使用 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了解距离/相似性度量的调查,尽管本文将其限制为一对概率分布。