两组高维点:在另一组中找到最近的邻居
问题内容:
我有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搜索。
请注意,此类问题不适用于本网站。我回答了您,因为您是新用户。下次请确保您不会忘记这一点。:)