Algorithm 求最近向量的算法

Algorithm 求最近向量的算法,algorithm,vector,cluster-analysis,Algorithm,Vector,Cluster Analysis,我有一组向量。对于那个向量集中的向量,我想找到最接近这个向量的子集。什么算法可以做到这一点。使用向量之间的余弦相似性(),然后对它们进行排序。这类算法称为最近邻或K最近邻 如果向量的方向很重要的话,正如Excepiont所说的那样,它将起作用。如果向量表示空间中的位置,则表示空间中距离的任何度量都将起作用 例如:取每个维度的平方和差的平方根。这将为每个向量提供一个距离,然后根据该距离对向量集进行升序排序 这个过程将在时间上是O(N)。如果这对您来说太慢,您可能需要查看一些常见的算法。如果您的问题

我有一组向量。对于那个向量集中的向量,我想找到最接近这个向量的子集。什么算法可以做到这一点。

使用向量之间的余弦相似性(),然后对它们进行排序。

这类算法称为最近邻或K最近邻

如果向量的方向很重要的话,正如Excepiont所说的那样,它将起作用。如果向量表示空间中的位置,则表示空间中距离的任何度量都将起作用

例如:取每个维度的平方和差的平方根。这将为每个向量提供一个距离,然后根据该距离对向量集进行升序排序


这个过程将在时间上是O(N)。如果这对您来说太慢,您可能需要查看一些常见的算法。

如果您的问题与大量数据有关:

我在ddj.com上发布了一个相关算法,可以找到离给定点最近的直线:

您必须通过将给定向量转换为多个点来修改此算法。这将大大减少可能匹配的数量。然后,必须通过以下方式检查每个可能匹配的精确匹配:

  • 找到两个向量的切割点或
  • 获取从矢量起点和终点到可能匹配点的距离,如本文所述

+1我只想提到标量积。我没有考虑向量的长度。谢谢你把我从嘲笑中解救出来;)我们不知道他想要什么作为距离你的向量代表“点”还是“方向”?我这样问是因为在一些答案中提到的余弦距离度量将标准化幅度,如果你在寻找欧几里德(或其他闵可夫斯基范数)距离,这可能不是你想要的。如果是这种情况,您需要传统的最近邻算法(kd树、k-均值聚类等)