我有两组:A和B.两组都包含相同数量的高维点。如何在Set B中为Set B中的每个点找到最近邻居?
我考虑使用Voronoi图,但似乎(根据维基百科)它不适合高于2的尺寸。
有人可以向我推荐一种方法吗?
答案 0 :(得分:3)
<强> FLANN 强>
如果您的数据确实存在于高维空间中,那么您可以使用FLANN。
它实际上构建了许多旋转的kd树和每个树的查询(一点点),保持了最佳结果。它还会旋转数据集以避免令人讨厌的情况。
在出版物部分,您可以阅读有关其工作原理的更多信息。
在“获取FLANN”部分,您还可以阅读手册。
但是,由于您希望在高维空间中执行最近邻搜索(NNS),因此您需要接受时间和精度之间的权衡(更多时间具有更高的准确性)。这就是FLANN执行近似NNS的原因(请查看this答案)。
<强> LSH 强>
作为替代方案,我建议使用LSH算法。这是E²LSH,它实际上实现了LSH算法。可以找到手册here。
算法背后的想法是,我们希望将相互靠近的点放在同一个桶中(很有可能)。然而,LSH致力于解决R最近邻问题。
通过R-near邻居数据结构,作者可能意味着给定一个查询点q,我们可以回答这个问题:&#34;数据集的哪些点位于半径R的q?&#34;。< / p>
但是,本手册解释了LSH如何用于执行NN搜索。
请注意,此类问题不适用于此网站。我回答你,因为你是一个新用户。下一次确保你不要忘记这一点。 :)