Data structures 如何优化用于计算K-最近邻算法的算法?

Data structures 如何优化用于计算K-最近邻算法的算法?,data-structures,time-complexity,knn,Data Structures,Time Complexity,Knn,KNN是一种简单易行的算法: # for each test datapoint in X_test: # calculate its distance from every points in X_train # find the top k most closest points # take majority vote of the k neighbors and use that as prediction for this test data point

KNN是一种简单易行的算法:

# for each test datapoint in X_test:
#     calculate its distance from every points in X_train
#     find the top k most closest points  
#     take majority vote of the k neighbors and use that as prediction for this test data point

但我认为时间复杂性还不够好。算法在实际应用中是如何优化的?(比如它使用的是什么技巧或数据结构?

k-最近邻算法与其他学习方法不同,因为没有 从训练实例中归纳出模型。数据保持原样;他们 它们只是存储在内存中

将遗传算法与k-NN相结合以提高性能。另一种成功的技术称为实例 同时也提出了面对选择、高效存储和噪声的问题 k-NN。您可以尝试这样做:当一个新实例应该被分类时;而不是 涉及所有学习实例来检索k-邻域,这将增加 计算时间,首先执行实例的较小子集的选择

您也可以尝试:

  • 通过减少训练次数提高k-NN速度 文件
  • 利用邻域大小和相似度改进k-NN 作用
  • 利用高级存储结构改进k-NN

  • k-最近邻算法不同于其他学习方法,因为没有 从训练实例中归纳出模型。数据保持原样;他们 它们只是存储在内存中

    将遗传算法与k-NN相结合以提高性能。另一种成功的技术称为实例 同时也提出了面对选择、高效存储和噪声的问题 k-NN。您可以尝试这样做:当一个新实例应该被分类时;而不是 涉及所有学习实例来检索k-邻域,这将增加 计算时间,首先执行实例的较小子集的选择

    您也可以尝试:

  • 通过减少训练次数提高k-NN速度 文件
  • 利用邻域大小和相似度改进k-NN 作用
  • 利用高级存储结构改进k-NN

  • 您所描述的是使用O(大小(X_测试)*大小(X_序列)*d)的蛮力kNN计算,其中d是特征向量中的维数

    更有效的解决方案是使用空间索引对X_列车数据进行索引。这通常会将单个查找减少到O(log(size(X_train))*d)甚至O(log(size(X_train))+d)

    常见的空间索引包括:

    • (它们经常被使用,但与“d”的比例很差)
    • ,例如
    • (通常对于较大的“d”来说效率不高,但例如,在d=1000的情况下工作良好,并且具有极好的删除/插入时间(免责声明,这是我自己的工作))
    • (我真的不太了解他们)
    • (查找高“d”的速度非常快,但建立时间很长
    还有一类“近似”NN搜索/查询。这些搜索/查询以正确性和速度为代价,可能会跳过一些最近的邻居。您可以在python中找到性能比较和大量实现


    如果您正在寻找上述一些空间索引的Java实现,请查看。

    您描述的是使用O(大小(X_测试)*大小(X_序列)*d)的蛮力kNN计算,其中d是特征向量中的维数

    更有效的解决方案是使用空间索引对X_列数据进行索引。这通常会将单个查找减少到O(log(size(X_列))*d)甚至O(log(size(X_列))+d)

    常见的空间索引包括:

    • (它们经常被使用,但与“d”的比例很差)
    • ,例如
    • (通常对于较大的“d”来说效率不高,但例如,在d=1000的情况下工作良好,并且具有极好的删除/插入时间(免责声明,这是我自己的工作))
    • (我真的不太了解他们)
    • (查找高“d”的速度非常快,但建立时间很长
    还有一类“近似”NN搜索/查询。这些搜索/查询以正确性和速度为代价,可能会跳过一些最近的邻居。您可以在python中找到性能比较和大量实现

    如果您正在寻找上述一些空间索引的Java实现,请查看