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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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