给定一个数据点,我需要生成K个最近的邻居。我读了sklearn.neighbours module of sklearn,但是它在两组数据之间生成邻居。我想要的可能是最接近所传递数据点的100个数据点的列表。
无论如何,任何KNN算法都应该在后台找到这K个数据点。有什么办法可以将这些K点作为输出返回?
这是我的sample notebook。
答案 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)