13

PythonでK最近傍法を計算したいと思います。どのライブラリを使用する必要がありますか?

4

4 に答える 4

22

scikitannを使うべきだと思います。

ここに最も近いneightbourについての良いチュートリアルがあります。

ドキュメントによると:

annは、 David M.MountとSunilAryaによって開発された、近似最近傍(ANN)ライブラリ( http://www.cs.umd.edu/~mount/ANN/ )用のSWIG生成のPythonラッパーです。annは、k最近傍法と近似kを実行できる不変のkdtree実装(ANN経由)を提供します

于 2011-04-06T12:00:06.553 に答える
5

これは、scipy.spatial.cKDTreeとpyflann.FLANNを比較するスクリプトです。アプリケーションにとってどちらが速いかを自分で確認してください。

import cProfile
import numpy as np
import os
import pyflann
import scipy.spatial

# Config params
dim = 4
data_size = 1000
test_size = 1

# Generate data
np.random.seed(1)
dataset = np.random.rand(data_size, dim)
testset = np.random.rand(test_size, dim)

def test_pyflann_flann(num_reps):
    flann = pyflann.FLANN()
    for rep in range(num_reps):
        params = flann.build_index(dataset, target_precision=0.0, log_level='info')
        result = flann.nn_index(testset, 5, checks=params['checks'])

def test_scipy_spatial_kdtree(num_reps):
    flann = pyflann.FLANN()
    for rep in range(num_reps):
        kdtree = scipy.spatial.cKDTree(dataset, leafsize=10)
        result = kdtree.query(testset, 5)

num_reps = 1000
cProfile.run('test_pyflann_flann(num_reps); test_scipy_spatial_kdtree(num_reps)', 'out.prof')
os.system('runsnake out.prof')
于 2011-07-15T05:41:14.637 に答える
4

scipy.spatial.cKDTree は高速で安定しています。NN補間に使用する例については、SOの(ahem) inverse-distance-weighted-idw-interpolation-with-pythonを参照してください。

(たとえば、「3Dに1Mのポイントがあり、1kの新しいポイントのk = 5の最近傍が必要」と言えば、より良い答えやコード例が得られる可能性があります
。彼ら ?)

于 2011-04-06T16:00:40.023 に答える
4

kd-treeアプローチを実行しようとしている場合は、ネイティブにscipyにあります:http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.KDTree.html#scipy.spatial.KDTree

于 2012-06-08T19:29:37.380 に答える