如何找到更高维度(比如 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
默认使用欧氏距离。
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
默认使用欧氏距离。