我正在设计一个最近邻搜索应用程序,类似于这个问题:Saving and incrementally updating nearest-neighbor model in R。我的情况是在Python中实现,但主要问题是当有新数据时,必须更新模型/索引。我目前正在尝试使用scikit-learn neighbors module,但我不确定它是否适合。
应用程序的目标是:用户输入查询,然后显示现有数据集中n(可能会固定为5)个最近邻居。对于此步骤,来自sklearn的此类搜索结构将有所帮助,但在添加新记录时需要重新生成。此外,这是每次查询发生的第一步,因此可能会有些“慢”,比如2-3秒,而不是“立即”。
然后,用户可以单击其中一条记录并查看该记录的最近邻居等。这意味着我们现在在现有数据集内,并且NN可以预先计算并存储在redis中(现在有200k条记录,但可以扩展到数千万或数亿条记录)。这应该非常快速地浏览。
但是,在没有必要完全重新计算距离矩阵的情况下,如何更新预计算数据是一个问题,特别是因为新记录很少(每周大约100条)。
是否存在可更新的NN搜索工具、方法或算法?
应用程序的目标是:用户输入查询,然后显示现有数据集中n(可能会固定为5)个最近邻居。对于此步骤,来自sklearn的此类搜索结构将有所帮助,但在添加新记录时需要重新生成。此外,这是每次查询发生的第一步,因此可能会有些“慢”,比如2-3秒,而不是“立即”。
然后,用户可以单击其中一条记录并查看该记录的最近邻居等。这意味着我们现在在现有数据集内,并且NN可以预先计算并存储在redis中(现在有200k条记录,但可以扩展到数千万或数亿条记录)。这应该非常快速地浏览。
但是,在没有必要完全重新计算距离矩阵的情况下,如何更新预计算数据是一个问题,特别是因为新记录很少(每周大约100条)。
是否存在可更新的NN搜索工具、方法或算法?
scipy.spatial
中的KDtree)不支持在初始构建之后添加节点(在某个时候,sklearn中的实现只是scipy中的包装器,不确定现在是否仍然是这种情况)。 - Paul Brodersen