我有一组矢量。对于该集合中的向量,我想找到最接近该向量的子集。什么算法可以做到这一点。
答案 0 :(得分:3)
在矢量中使用余弦相似度(http://en.wikipedia.org/wiki/Cosine_similarity),然后对它们进行排序。
答案 1 :(得分:3)
此类算法称为最近邻或 K最近邻。
如果向量的方向很重要,cosine similarity作为例外情况将会起作用。如果向量表示空间中的位置,则表示空间中距离的任何度量都将起作用。
例如Euclidean distance:取每个维度中平方和差的平方根。这将为每个向量提供一个距离,然后对在此距离上升的向量集进行排序。
此过程将及时为O(N)。如果这对您来说太慢,您可能需要查看一些常见的K Nearest Neighbour算法。
答案 2 :(得分:1)
如果您的问题与大量数据有关:
我在ddj.com上发布了一个相关的算法,它找到了到给定点的最近的行:
Accelerated Search For the Nearest Line
您必须通过将给定矢量转换为多个点来修改此算法。这将大大减少可能的匹配的数量。然后通过
检查每个可能匹配的完全匹配