首页 文章

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

提问于
浏览
0

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

1 回答

  • 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)的一些预构建算法,用于分类任务 . 通常,这些数据结构是人们唯一感兴趣的东西 .

    Edit

    如果我正确解释您的评论,您想使用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]]
    

相关问题