例如,我有一个向量x
和a
它是最近的邻居。然后,b
是它的下一个最近邻居。在Pyton或R中是否有任何包输出类似[a, b]
的东西,意味着a是它的最近邻居(可能是多数投票),而b是它的第二个最近邻居。
答案 0 :(得分:3)
这正是为这些度量树构建的。
你的问题在于你要求的东西就像使用sklearn的KDTree一样简单(根据你的游戏指标考虑BallTree):
import numpy as np
from sklearn.neighbors import KDTree
X = np.array([[1,1],[2,2], [3,3]]) # 3 points in 2 dimensions
tree = KDTree(X)
dist, ind = tree.query([[1.25, 1.35]], k=2)
print(ind) # indices of 2 closest neighbors
print(dist) # distances to 2 closest neighbors
输出:
[[0 1]]
[[ 0.43011626 0.99247166]]
并且要明确一点:KNN 通常是指基于度量树(KDTree,BallTree)的一些预构建算法,用于分类任务。通常,这些数据结构是人们唯一感兴趣的东西。
修改强>
如果我正确理解您的评论,您想使用manhattan / taxicab / l1 metric。
查看here以获取这些空间树的兼容性列表。
你会像那样使用它:
X = np.array([[1,1],[2,2], [3,3]]) # 3 points in 2 dimensions
tree = KDTree(X, metric='l1') # !!!
dist, ind = tree.query([[1.25, 1.35]], k=2)
print(ind) # indices of 2 closest neighbors
print(dist) # distances to 2 closest neighbors
输出:
[[0 1]]
[[ 0.6 1.4]]