Создать 'K' ближайших соседей к точке данных - PullRequest
0 голосов
/ 21 декабря 2018

Мне нужно сгенерировать K ближайших соседей с учетом точки данных.Я прочитал sklearn.neighbours модуль sklearn , но он генерирует соседей между двумя наборами данных.То, что я хочу - это, вероятно, список из 100 точек данных, ближайших к переданной точке данных.

Любой алгоритм KNN должен в любом случае находить эти точки данных K под колпаком.Есть ли способ, чтобы эти K-точки могли быть возвращены как выходные?

Вот мой образец ноутбука .

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018
from sklearn.neighbors import NearestNeighbors 

Это может дать вам индекс k ближайших соседей в вашем наборе данных.используйте kneighbors, первое значение - это расстояние, а второе значение - это индекс соседей.Из документации:

>>> samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
>>> from sklearn.neighbors import NearestNeighbors
>>> neigh = NearestNeighbors(n_neighbors=1)
>>> neigh.fit(samples) 
NearestNeighbors(algorithm='auto', leaf_size=30, ...)
>>> print(neigh.kneighbors([[1., 1., 1.]])) 
(array([[0.5]]), array([[2]]))
0 голосов
/ 21 декабря 2018

Вам не нужно заглядывать под капот.

Используйте дерево kd для поиска ближайшего соседа .Как только у вас есть готовый индекс, вы бы запросили его для k-NN.

Пример ссылки:

>>> from scipy import spatial
>>> x, y = np.mgrid[0:5, 2:8]
>>> tree = spatial.KDTree(list(zip(x.ravel(), y.ravel())))
>>> pts = np.array([[0, 0], [2.1, 2.9]])
>>> tree.query(pts)
(array([ 2.        ,  0.14142136]), array([ 0, 13]))
>>> tree.query(pts[0])
(2.0, 0)
...