两组高维点:在另一组中找到最近邻
Posted
技术标签:
【中文标题】两组高维点:在另一组中找到最近邻【英文标题】:Two sets of high dimensional points: Find the nearest neighbour in the other set 【发布时间】:2014-12-25 20:11:27 【问题描述】:我有 2 个集合:A 和 B。这两个集合包含相同数量的高维点。如何为 Set B 中的每个点找到 Set A 中最近的邻居?
我考虑过使用 Voronoi 图,但似乎(根据***)它不适合大于 2 的尺寸。
有人可以给我建议一个方法吗?
【问题讨论】:
可能太宽泛了。在信息检索世界中有大量的算法和数据结构。你可以开始看en.wikipedia.org/wiki/Spatial_database#Spatial_index 【参考方案1】:FLANN
如果您的数据确实位于高维空间中,那么您可以使用FLANN。
它实际上构建了许多旋转的 kd-trees 并查询(一点)每棵树,以保持找到的最佳结果。它还会旋转数据集以避免出现令人讨厌的情况。
在出版物部分,您可以详细了解它的工作原理。
在获取 FLANN 部分,您还可以阅读手册。
但是,由于您希望在高维空间中执行最近邻搜索 (NNS),因此您需要接受时间和准确度之间的权衡(时间越长,准确度越高)。这就是 FLANN 执行近似 NNS 的原因(查看this 答案了解更多信息)。
LSH
作为替代方案,我建议使用 LSH 算法。这里是E²LSH,实际上实现了LSH算法。手册可以在here找到。
算法背后的想法是,我们希望将彼此靠近的点(以高概率)放置在同一个桶中。然而,LSH致力于解决R最近邻问题。
通过R-近邻数据结构,作者大概意思是给定一个查询点q,我们可以回答这个问题:“数据集的哪些点位于q的半径R内?”。
但是,该手册解释了如何使用 LSH 执行 NN 搜索。
请注意,此类问题不适用于本网站。我回答你是因为你是新用户。下次确保你不要忘记这一点。 :)
【讨论】:
以上是关于两组高维点:在另一组中找到最近邻的主要内容,如果未能解决你的问题,请参考以下文章