【问题标题】:Algorithms for finding closest vector寻找最近向量的算法
【发布时间】:2011-02-07 19:35:40
【问题描述】:

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

【问题讨论】:

  • 你的向量代表“点”还是“方向”?我问是因为某些答案中提到的余弦距离度量会使幅度标准化,如果您正在寻找欧几里德(或其他 Minkowski 范数)距离,这可能不是您想要的。如果是这种情况,您需要传统的最近邻算法 kd-trees、k-means 聚类等)

标签: algorithm vector cluster-analysis


【解决方案1】:

使用向量之间的余弦相似度(http://en.wikipedia.org/wiki/Cosine_similarity),然后对它们进行排序。

【讨论】:

  • +1 我只想提到标量积。我没有考虑矢量长度。谢谢你把我从嘲笑中解救出来;)
  • 我们不知道他想要什么作为距离
【解决方案2】:

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

cosine similarity 如例外所说,如果矢量的方向很重要,它将起作用。如果向量表示空间中的位置,那么任何表示空间距离的度量都可以。

例如Euclidean distance:取每个维度差的平方和的平方根。这将为您提供每个向量的距离,然后按此距离对向量集进行排序。

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

【讨论】:

    【解决方案3】:

    如果您的问题涉及大量数据:

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

    Accelerated Search For the Nearest Line

    您必须修改此算法,即将给定向量转换为多个点。这将大大减少可能的匹配的数量。然后必须通过

    检查每个可能的匹配项的精确匹配项
    • 找到两个向量的切割点或
    • 获取从矢量起点和终点到可能匹配的距离,如文章中所述

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2010-10-24
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 2011-03-12
      • 2011-02-22
      相关资源
      最近更新 更多