gpt4 book ai didi

scikit-learn - 可更新的最近邻搜索

转载 作者:行者123 更新时间:2023-12-04 03:00:38 25 4
gpt4 key购买 nike

我正在尝试为最近邻搜索应用程序设计一个好的设计。这与这个问题有些相似:

Saving and incrementally updating nearest-neighbor model in R

在我的例子中,这将是在 Python 中,但要点是当新数据出现时,模型/索引必须更新的部分。我目前正在玩 scikit-learn neighbors module但我不认为它很合适。

应用的目标:

用户提出查询,然后将显示现有数据集中的 n 个(可能固定为 5 个)最近邻。对于此步骤,来自 sklearn 的搜索结构会有所帮助,但在添加新记录时必须重新生成。此外,这是第一个 ste,每个查询发生 1 次,因此与 2-3 秒相比可能有点“慢” “立即”。

然后用户可以单击其中一条记录并查看该记录的最近邻居等。这意味着我们现在处于现有数据集中,并且 NN 可以预先计算并存储在 redis 中(目前有 20 万条记录,但可以扩展到百万分之一或第一亿)。这样浏览应该很快。

但在这里我会面临同样的问题,即如何更新预先计算的数据而不必对距离矩阵进行完整的重新计算,尤其是因为新记录很少(比如每周 100 条)。

是否存在用于可更新神经网络搜索的工具、方法或算法?

编辑 4 月 3 日:

正如许多地方指出的那样,KDTree 或 BallTree 并不真正适合高维数据。我已经意识到,对于具有 20 万条记录和 512 维的小数据集的概念验证,暴力破解根本不会慢很多,大约 550 毫秒对 750 毫秒。

但是对于数百万以上的大数据集,这个问题仍然没有解决。我看过 datasketch LSH Forest,但在我的情况下,这似乎不够准确,或者我用错了。将就此提出一个单独的问题。

最佳答案

您应该研究 FAISS 及其 IVFPQ 方法你可以做的是为每次更新创建多个索引并将它们与旧索引合并

关于scikit-learn - 可更新的最近邻搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49529193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com