如何找到更高维度(比如 19)中的点与其第 k(比如 20)最近邻点的距离

how to find the DISTANCE of a point in higher dimension(say 19) to its kth(say 20th) nearest neighbor

python 中是否有任何函数或库可以帮助我找到一个点(具有 19 个特征)与其第 20 个最近邻点之间的 DISTANCE?

我试过欧几里得距离,但由于我有将近 600 000 条记录(点),所以我遇到了 MemoryError。有没有更有效和 pythonic 的方法来找到相同的?

一个选项是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)

这里我们使用最多有 20 个邻居的 knn。 query和所有最近邻的距离可以通过调用kneighbors函数得到:

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

第 20 个邻居对应的那个:

distance_to_20th = distances[0,-1]

KNearestNeighbor默认使用欧氏距离。