返回2个或更多最近邻居的KNN算法

时间:2017-12-28 19:40:00

标签: scikit-learn

例如,我有一个向量xa它是最近的邻居。然后,b是它的下一个最近邻居。在Pyton或R中是否有任何包输出类似[a, b]的东西,意味着a是它的最近邻居(可能是多数投票),而b是它的第二个最近邻居。

1 个答案:

答案 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]]