kNN中一个点的最远点

3
kNN 分类器 的文档中,有一个方法 kneighbors,用于返回 k 个最近的邻居。我想知道如何优雅地返回 k 个最远的邻居?

我真的很喜欢你在寻找最遥远的邻居。能否告诉我这样做的原因是什么? - Aerodynamika
— 我真的很喜欢你在寻找最遥远的邻居。你能告诉我这样做的原因吗? - undefined
@Aerodynamika 异常检测是一个例子。 - Tengerye
2个回答

4

没有,这种能力不存在。

你需要记住的是,为了性能考虑,会有一棵树来获取最近的邻居。试图找到最远的邻居意味着要遍历整棵树,基本上计算所有距离。

因此,在这种情况下不要使用kNN算法,只需计算距离并对其进行排序即可。


1
只是为了确认一下,我需要担心kNN分类器使用哪棵具体的树吗? - Tengerye
不,任何树都可能使得检索最远邻居变得不可能。而kNN树则是为查找最近邻居而进行了优化的。 - Matthieu Brucher
这取决于情况,大多数空间索引默认情况下不支持最远邻居查询,但是大多数空间索引可以轻松修改以高效地执行此操作,而无需搜索整个树。请参见我的答案作为参考。 - TilmannZ

2
许多空间索引(四叉树、R-树等)可以很容易地修改以支持最远邻居查询。这里描述了一种常见算法here(见第4.5节)。然而,大多数索引不能直接支持它。
如果您正在使用kd-tree,则可能无法高效地执行此操作,如其他帖子所述。
CoverTree可能是另一个选择,我不认为Hjaltason / Samet的算法适用于那里,但不太可能搜索整个树。
我也不确定scikit-learn提供哪些选项,如果您确实必须使用它。

你有其他的库推荐吗? - Tengerye
抱歉,我不太熟悉机器学习库。我也不知道Python的空间索引库(我知道一些Java库,但可能没有最远邻居)。最远邻搜索有点“罕见”,所以您可能需要自己调整现有的库/代码。 - TilmannZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接