Knn搜索大数据?

时间:2013-04-17 11:54:38

标签: algorithm search machine-learning knn

我对在大型数据集上执行knn搜索感兴趣。

有一些库:ANNFLANN,但我对这个问题感兴趣:如果你的数据库不完全适合内存(RAM),如何组织搜索?

2 个答案:

答案 0 :(得分:4)

我认为这取决于你的索引与内存相比有多大。以下是我的第一个自发想法:

  1. 假设它的大小是RAM的几十倍,我会尝试使用例如层次聚类树(在FLANN中实现)来聚类数据。我会修改树的实现,以便它们将分支保留在内存中并将树叶(簇)保存在磁盘上。因此,每次都必须加载适当的集群。然后,您可以尝试以不同的方式对其进行优化。

  2. 如果它不是那么大(让我们说RAM的大小的两倍),我会将数据集分成两部分,并为每个部分创建一个索引。因此,我需要在每个数据集中找到最近的邻居,然后在它们之间进行选择。

答案 1 :(得分:4)

这取决于您的数据是否非常高维。如果它相对较低,则可以使用现有的磁盘R-Tree实现,例如Spatialite

如果它是一个更高维度的数据,你可以使用X-Trees,但我不知道任何磁盘上的实现。

或者,您可以使用磁盘持久性实现locality sensitive hashing,例如使用mmap。