【问题标题】:What are some fast approximations of Nearest Neighbor?最近邻的一些快速近似值是什么?
【发布时间】:2011-06-29 10:42:07
【问题描述】:

假设我有一个巨大的(几百万)个 n 向量列表,给定一个新向量,我需要从集合中找到一个非常接近的向量,但它不需要是最接近的。 (Nearest Neighbor 找到最近的并在 n 时间内运行)

有哪些算法可以以准确性为代价快速逼近最近邻?

编辑:因为它可能会有所帮助,所以我应该提到数据大部分时间都非常平滑,随机维度中出现尖峰的可能性很小。

【问题讨论】:

标签: algorithm language-agnostic data-mining nearest-neighbor


【解决方案1】:

“最近邻”lsh 库的网络搜索发现 http://www.mit.edu/~andoni/LSH/ http://www.cs.umd.edu/~mount/ANN/ http://msl.cs.uiuc.edu/~yershova/MPNN/MPNN.htm

【讨论】:

    【解决方案2】:

    存在比 O(n) 更快的算法来通过任意距离搜索最近的元素。详情请查看http://en.wikipedia.org/wiki/Kd-tree

    【讨论】:

    • +1 我打算推荐 kd-tree。找到最近的邻居,也可以在 O(log(n)+k) 时间内找到最近的 k。
    • KD Trees much 如果您在查看 1m 点中的 1000 个点后尽早退出,则速度会更快。请参阅nearest-neighbors-in-high-dimensional-data 下的截止 1000、5000 的运行时,以及那里的 LSH 上的良好链接。
    【解决方案3】:

    如果您使用高维向量,如 SIFT 或 SURF 或多媒体领域使用的任何描述符,我建议您考虑 LSH。

    魏东 (http://www.cs.princeton.edu/cass/papers/cikm08.pdf) 的博士论文可能会帮助您找到更新的 KNN 搜索算法,即 LSH。与更传统的 LSH 不同,如麻省理工学院研究人员早些时候发布的 E2LSH (http://www.mit.edu/~andoni/LSH/),他的算法使用多重探测来更好地平衡召回率和成本之间的权衡。

    【讨论】:

      【解决方案4】:

      对于近似最近邻,最快的方法是使用局部敏感哈希 (LSH)。 LSH 有许多变体。您应该根据数据的距离度量选择一个。 LSH 查询时间的大 O 与数据集大小无关(不考虑输出结果的时间)。所以它真的很快。这个LSH library 为 L2(欧几里得)空间实现了各种 LSH。

      现在,如果您的数据维度小于 10,如果您想要精确的结果,则首选 kd tree

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-26
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 2011-11-12
        • 2016-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多