生成到数据点的“ K”最近邻居

时间:2018-12-21 13:14:47

标签: python pandas scikit-learn knn nearest-neighbor

给定一个数据点,我需要生成K个最近的邻居。我读了sklearn.neighbours module of sklearn,但是它在两组数据之间生成邻居。我想要的可能是最接近所传递数据点的100个数据点的列表。

无论如何,任何KNN算法都应该在后台找到这K个数据点。有什么办法可以将这些K点作为输出返回?

这是我的sample notebook

2 个答案:

答案 0 :(得分:4)

from sklearn.neighbors import NearestNeighbors 

这可以为您提供数据集中k个最近邻居的索引。使用kneighbors,第一个值是距离,第二个值是邻居的索引。来自文档:

>>> samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
>>> from sklearn.neighbors import NearestNeighbors
>>> neigh = NearestNeighbors(n_neighbors=1)
>>> neigh.fit(samples) 
NearestNeighbors(algorithm='auto', leaf_size=30, ...)
>>> print(neigh.kneighbors([[1., 1., 1.]])) 
(array([[0.5]]), array([[2]]))

答案 1 :(得分:3)

您不需要在引擎盖下看。

使用kd-tree for nearest-neighbor lookup。一旦准备好索引,就可以query将其用于k-NN。

参考示例:

>>> from scipy import spatial
>>> x, y = np.mgrid[0:5, 2:8]
>>> tree = spatial.KDTree(list(zip(x.ravel(), y.ravel())))
>>> pts = np.array([[0, 0], [2.1, 2.9]])
>>> tree.query(pts)
(array([ 2.        ,  0.14142136]), array([ 0, 13]))
>>> tree.query(pts[0])
(2.0, 0)