我正在研究近似最近邻算法。
我最近发现了Annoy Library,它在合理的速度内找到KNN做得非常好。 要进行更深入的分析,您可以浏览meetup幻灯片。
阅读幻灯片并检查源代码后,我无法看出为什么这种算法在高维数据中比KD-Tree更有效。
KD-Tree是一个很棒的NN算法,但在高维中,它的运行时间几乎与暴力搜索[O(n^2)]相同,因此需要检查许多相邻叶子节点。
原因是在高维中,单位球体的体积变得更小(您可以在这里查看)。
我在Annoy库中唯一发现的区别是使用超平面而不是逐个维度进行分区。
是否有人分析过这个算法并解释为什么它比KD树快那么多?
k
个元素,而 LSH 使用哈希表和签名来查找相似项的候选项。此外,根据源代码,它不使用降维技术。 - lsxliron