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


问题内容

我有2组:A和B。两组都包含相同数量的高维点。如何在集合A中为集合B中的每个点找到最近的邻居?

我考虑过使用Voronoi图,但是(根据维基百科)似乎不适合大于2的尺寸。

有人可以给我建议一种方法吗?


问题答案:

法兰

如果您的数据确实位于高维空间中,则可以使用FLANN

实际上,它会构建许多旋转的kd树并每棵树(一点点)进行查询,从而保持最佳结果。它还会轮换数据集,以免出现讨厌的情况。

在出版物部分,您可以阅读有关其工作原理的更多信息。

在获取法兰部分中,您还可以阅读手册。

但是,由于您希望在高维空间中执行最近邻搜索(NNS),因此您需要接受时间与准确性之间的权衡(时间越多,准确性越高)。这就是FLANN执行近似NNS的原因。


LSH

或者,我建议使用LSH算法。这是E²LSH,它实际上实现了LSH算法。该手册可在此处找到。

该算法背后的思想是,我们希望将彼此靠近的点(很有可能)放置在同一存储桶中。但是,LSH致力于解决R最近邻居问题。

通过R附近的邻居数据结构,作者可能意味着给定一个查询点q,我们可以回答以下问题:“数据集中的哪个点位于从q开始的半径R内?”。

但是,该手册说明了如何使用LSH进行NN搜索。


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