如何通过R-最近邻求解最近邻?

Posted

技术标签:

【中文标题】如何通过R-最近邻求解最近邻?【英文标题】:How to solve nearest neighbor through the R-nearest neighbor? 【发布时间】:2016-10-08 18:18:12 【问题描述】:

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

E 2LSH 也可用于解决最近邻问题,其中, 给定查询 q,报告点需要数据结构 在 P 中最接近 q。这可以通过创建几个 R-near 邻居数据结构,对于 R = R1, R2, . . . Rt ,其中 Rt 应该 大于从任何查询点到它的最大距离 最近的邻居。然后可以通过以下方式恢复最近的邻居 以半径递增的顺序查询数据结构, 找到第一个点时停止

有人可以改写一下吗?我没有这个程序使用 R 近邻方法找到最近的邻居。

【问题讨论】:

【参考方案1】:

我将提供一个示例,它应该可以解决问题。假设我们的数据集仅包含一个点 p 和一个查询点 q。我们假设*pq 的距离是 3,9。

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

假设我选择构建 5 个这种数据结构,从 R = 1 到 5。在我们看来,这就是我们迄今为止所做的:

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

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

从 R = 2?不! 从 R = 3?不! 从 R = 4?是的,那就是q!所以现在我们完成了。 4 是您在问题中提到的 Rt


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

$ 我听说现在有比 E2LSH 更现代的东西,在 Ilya Razenshteyn 的主页上。

【讨论】:

神圣...!这太天真和低效了:D 我不得不说:我已经认为这是问题中描述的方法,但在我看来,它有很多问题,我想确定一下!首先:我们如何决定增加半径的步骤?如果它太大,可能是因为找不到邻居,我们会找到一堆,但如果它太小,我们可能不得不做很多迭代!简而言之:像地狱一样调音(这通常不是一件好事)。无论如何非常感谢 FALCONN 链接和您的回答! 而且你的答案很清楚!非常感谢(希望不要因为所有这些关于 LSH 的问题而打扰您;)) @justHelloWorld 调整!我不知道另一种技术,但这是一个悬而未决的问题,并且正在对此进行大量研究!不,我的朋友,一点也不!事实上,我很喜欢你的问题,因为它们让我刷新了我所知道的并学到了一些新东西!所以我谢谢你!干杯! 那么,您能否快速浏览一下this 的问题? :) 我们可以开始聊天吗?这可能非常有用且节省时间:)

以上是关于如何通过R-最近邻求解最近邻?的主要内容,如果未能解决你的问题,请参考以下文章

返回最近邻的值

使用 R 中的最近邻分类器分配类标签

R中的空间最近邻分配

如何使用 Matlab 通过最近邻插值旋转图像

在 R 中使用 k-NN(类包)的最近邻索引

如何对 numpy 数组进行 n-D 距离和最近邻计算