两组高维点:在另一组中找到最近邻

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 搜索。


请注意,此类问题不适用于本网站。我回答你是因为你是新用户。下次确保你不要忘记这一点。 :)

【讨论】:

以上是关于两组高维点:在另一组中找到最近邻的主要内容,如果未能解决你的问题,请参考以下文章

高维数据中的最近邻?

为集合 A 中的所有点查找集合 B 中的最近邻的算法

从几何角度切入最近邻

Matlab - 在三维坐标系中找到最近邻

四叉树最近邻算法

最近邻搜索kdTree