Python中增量最近邻算法

有人知道在Python中实现的可以增量更新的最近邻算法吗?我找到的所有算法,比如这个,似乎都是批处理方式。是否有可能实现一个增量NN算法?


回答:

我认为你提到的问题是,增量构建KD树或KNN树时,树最终会变得不平衡,你无法通过简单的树旋转来解决平衡问题并保持一致性。至少,重新平衡的任务并不简单,人们肯定不希望在每次插入时都进行。通常,人们会选择用批处理方法构建树,插入一批新点,让树在一定程度上变得不平衡,然后再重新平衡它。

一个非常相似的方法是为M个点批量构建数据结构,使用它处理M’个点,然后用M+M’个点批量重建数据结构。由于重新平衡不是我们熟悉的树的常规、快速算法,与之相比,重建不一定慢,在某些情况下甚至可能更快(取决于进入增量算法的点的序列)。

尽管如此,如果你采用重建方法,你编写的代码量、调试难度以及其他人理解你的代码的难度都会显著降低。如果你这样做,你可以使用批处理方法,并保持一个外部列表,记录尚未插入树中的点。可以使用暴力方法来确保这些点中没有一个比树中的点更近。

下面是一些Python实现/讨论的链接,但我没有找到任何明确声称是增量的。祝你好运。

http://www.scipy.org/Cookbook/KDTree

http://cgi.di.uoa.gr/~compgeom/pycgalvisual/kdppython.shtml

http://sites.google.com/site/mikescoderama/Home/kd-tree-knn

http://en.wikipedia.org/wiki/Kd-tree

注意:我的评论适用于高维空间。如果你在2D或3D中工作,我所说的话可能不适用。(如果你在非常高维的空间中工作,使用暴力法或近似最近邻。)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注