在python中K最近邻居

我想在python中计算K-最近邻居。我应该使用什么库?     
已邀请:
我认为你应该使用scikit ann。 这里有一个关于最近的邻居的好教程。 根据文件:   ann是由David M. Mount和Sunil Arya开发的近似最近邻(ANN)库(http://www.cs.umd.edu/~mount/ANN/)的SWIG生成的python包装器。 ann提供了一个不可变的kdtree实现(通过ANN),它可以执行k近邻和近似k     
我写了一个脚本来比较FLANN和scipy.spatial.cKDTree,无法获得ANN包装器进行编译。您可以自己尝试一下,看看哪些适用于您的应用程序。对于我的FLANN测试用例,cKDTree的运行时间相当,FLANN的速度提高了约1.25倍。当我增加testSize时,FLANN比cKDTree快2倍。看起来像FLANN将更难以集成,具体取决于项目,因为它不是标准python包的一部分。
import cProfile
from numpy import random
from pyflann import *
from scipy import spatial

# Config params
dim = 4
knn = 5
dataSize = 1000
testSize = 1

# Generate data
random.seed(1)
dataset = random.rand(dataSize, dim)
testset = random.rand(testSize, dim)

def test1(numIter=1000):
    '''Test tree build time.'''
    flann = FLANN()
    for k in range(numIter):
        kdtree = spatial.cKDTree(dataset, leafsize=10)
        params = flann.build_index(dataset, target_precision=0.0, log_level = 'info')

def test2(numIter=100):
    kdtree = spatial.cKDTree(dataset, leafsize=10)
    flann = FLANN()
    params = flann.build_index(dataset, target_precision=0.0, log_level = 'info')
    for k in range(numIter):
        result1 = kdtree.query(testset, 5)
        result2 = flann.nn_index(testset, 5, checks=params['checks'])

import cProfile
cProfile.run('test2()', 'out.prof')
    
scipy.spatial.cKDTree 快速而坚实。 有关将其用于NN插值的示例,请参阅(ahem) SO上的逆距离加权-idw-interpolation-with-python。 (如果你可以说例如“我在3d中有1M点,并且想要k = 5个最近邻居1k个新点”, 你可能会得到更好的答案或代码示例。 一旦找到邻居,你想和邻居做些什么?)     
如果你想做一个kd-tree方法,它本身就是scipy:http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.KDTree.html#scipy.spatial.KDTree     

要回复问题请先登录注册