如何通过R最近邻居解决最近邻居?

时间:2016-06-08 12:57:54

标签: c++ math computational-geometry nearest-neighbor locality-sensitive-hash

引用E2LSH手册(关于这个特定库并不重要,对于一般的NN问题,这个引用应该是正确的):

  

E 2LSH也可用于解决最近邻问题,其中,   给定查询q,数据结构需要报告点   在P中最接近q。这可以通过创建几个R-near来完成   邻居数据结构,R = R1,R2 ,. 。 。 Rt,Rt应该在哪里   大于从任何查询点到其的最大距离   最近的邻居。然后可以通过恢复最近的邻居   按照不断增加的顺序查询数据结构,   每当找到第一个点时停止

有人可以改一下吗?我没有使用R-near邻近方法找到最近邻居的过程。

1 个答案:

答案 0 :(得分:1)

我将提供一个例子,它应该清理一下。假设我们的数据集只包含一个点p和一个查询点到达q。我们假设 * pq的距离为3,9。

现在,通过使用E2LSH $ ,我可以创建一个解决R-最近邻居问题的数据结构,即它将回答半径R内的是(并获取点)如果不存在这样的问题,它将回答否。

假设我选择构建5种类型的数据结构,从R = 1到5开始。在我们看来,这是我们到目前为止所做的:

enter image description here

所以现在记住,d(p,q)= 3,9,因此我们期望询问使用R = 4构建的数据结构,并为我们找到查询点q

现在让我们假装我们不知道d(p,q),所以我们从我们选择的最小半径开始搜索,那就是1.所以,我们问,Radius中是否有任何东西(等于1)数据集?不!

从R = 2?没有! 从R = 3?没有! 从R = 4?是的,那是q!所以现在我们完成了。 4是你在问题中提到的R t

* 这是一个强有力的假设,E2LSH 因为必须让用户输入参数R而遭受,因为通常我们不知道R应该具有什么值,太大而且我们会浪费空间和时间,太小,我们不会找到我们的查询!

$ 我在Ilya Razenshteyn的主页上听说现在比E2LSH更现代了。