как найти РАССТОЯНИЕ точки в более высоком измерении (скажем, 19) до ее ближайшего соседа (скажем, 20-го) - PullRequest
0 голосов
/ 29 мая 2018

Есть ли какая-либо функция или библиотека в python, которая может помочь мне найти РАССТОЯНИЕ между точкой (имеющей 19 объектов) и ее 20-м ближайшим соседом?

Я пробовал Евклидово расстояние , но поскольку у меня есть почти 600 000 записей (точек), я сталкиваюсь с MemoryError .Есть ли более эффективный и питонный способ найти то же самое?

1 Ответ

0 голосов
/ 29 мая 2018

Опция с sklearn.neighbors.KNearestNeighbor.

Это готовит набор данных, аналогичный вашему (600000 выборок с 19 функциями) и соответствует модели knn:

import numpy as np
from sklearn.neighbors import KNeighborsClassifier

N = 600000
N_ATTR = 19

samples = np.random.normal(size=(N, N_ATTR))
y = np.ones(N,)
knn = KNeighborsClassifier(n_neighbors=20)
knn.fit(samples, y)

Здесь мы используем knn с количеством соседей до 20.Расстояние между query и всеми ближайшими соседями можно получить, вызвав функцию kneighbors:

query = np.random.normal(size=(1, N_ATTR))
distances = knn.kneighbors(query)[0]

и для той, которая соответствует 20-му соседу:

distance_to_20th = distances[0,-1]

KNearestNeighbor по умолчанию использует евклидово расстояние.

...