Опция с 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
по умолчанию использует евклидово расстояние.