小编典典

如何有效地查找高维数据中的k最近邻?

algorithm

因此,我有大约16,000个75维数据点,对于每个点,我想找到它的k个最近邻居(使用欧几里德距离,如果使它更容易,则当前k = 2)

我最初的想法是为此使用kd树,但事实证明,随着维数的增加,它们变得相当低效。在我的示例实现中,其速度仅比穷举搜索略快。

我的下一个想法是使用PCA(主成分分析)减少维数,但我想知道:是否有一些巧妙的算法或数据结构可以在合理的时间内准确地解决此问题?


阅读 309

收藏
2020-07-28

共1个答案

小编典典

维基百科有关kd-trees的文章提供了指向ANN库的链接:

ANN是用C ++编写的库,它支持数据结构和算法,可以在任意高维度上进行精确和近似的最近邻居搜索。

根据我们自己的经验,ANN对于大小范围从数千到数十万, 尺寸高达20的 点集都可以非常有效地执行 。(
对于尺寸较大的应用程序,其结果参差不齐,但是您仍然可以尝试使用它 。)

就算法/数据结构而言:

该库基于kd树和盒分解树实现了许多不同的数据结构,并采用了两种不同的搜索策略。

我会先直接尝试一下,如果不能产生令人满意的结果,我会在应用PCA / ICA之后将其与数据集一起使用(因为最终以kd-tree缩小尺寸的可能性很小)处理)。

2020-07-28