【发布时间】:2013-04-10 04:07:43
【问题描述】:
【问题讨论】:
标签: algorithm search machine-learning knn
【问题讨论】:
标签: algorithm search machine-learning knn
我想这取决于您的索引与内存相比有多大。这是我的第一个自发想法:
假设它是 RAM 大小的几十倍,我会尝试使用例如层次聚类树(在 FLANN 中实现)对我的数据进行聚类。我会修改树的实现,以便它们将分支保存在内存中并将叶子(簇)保存在磁盘上。因此,每次都必须加载适当的集群。然后,您可以尝试以不同的方式对此进行优化。
如果它不是那么大(假设是 RAM 大小的两倍),我会将数据集分成两部分并为每个部分创建一个索引。因此,我需要在每个数据集中找到最近的邻居,然后在它们之间进行选择。
【讨论】:
I would try to cluster my data using, for instance, hierarchical clustering trees。 kdd 或 ball 树是这样的方法吗?
这取决于您的数据是否非常高维。如果是比较低维的,可以使用现有的磁盘上的R-Tree实现,比如Spatialite。
如果是更高维度的数据,你可以使用X-Trees,但我不知道有什么磁盘上的实现。
或者,您可以使用磁盘持久性实现locality sensitive hashing,例如使用 mmap。
【讨论】: