python - 搜索 k 个最近点

标签 python knn

我有一大堆功能,看起来像这样:

id1 28273 20866 29961 27190 31790 19714 8643 14482 5384 ....  upto 1000
id2 12343 45634 29961 27130 33790 14714 7633 15483 4484 ....  
id3 ..... ..... ..... ..... ..... ..... .... ..... .... .... .   .   .
...
id200000 .... .... ... ..  .  .  .  .

我想计算每个 id 欧几里得距离并对它们进行排序以找到 5 个最近的点。
因为我的数据集非常大。最好的方法是什么。

最佳答案

scikit-learn 有 nearest neighbor search 。例子:

  • 将数据加载到 NumPy 数组中。
    >>> import numpy as np
    >>> X = np.array([[28273, 20866, 29961, 27190, 31790, 19714, 8643, 14482, 5384, ...],
                      [12343, 45634, 29961, 27130, 33790, 14714, 7633, 15483, 4484, ...], 
                      ...
                      ])
    

    (仅显示两点。)
  • 适合 NearestNeighbors 对象。
    >>> from sklearn.neighbors import NearestNeighbors
    >>> knn = NearestNeighbors(n_neighbors=5)
    >>> knn.fit(X)
    NearestNeighbors(algorithm='auto', leaf_size=30, n_neighbors=5, p=2,
             radius=1.0, warn_on_equidistant=True)
    
    p=2 表示欧几里得 (L2) 距离。 p=1 表示曼哈顿(L1)距离。
  • 执行查询。要获取 X[0] 的邻居,您的第一个数据点:
    >>> knn.kneighbors(X[0], return_distance=False)
    array([[0, 1]])
    

    所以,X[0] 的最近邻是 X[0] 本身和 X[1](当然)。

  • 确保你设置了 n_neighbors=6 因为你的集合中的每个点都将是它自己最近的邻居。

    免责声明 :我参与了 scikit-learn 开发,所以这不是公正的建议。

    关于python - 搜索 k 个最近点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12369484/

    相关文章:

    python - 如何使用python使用anaconda?

    python - Pandas 没有安装在 virtualenv 中,尽管看起来是这样

    python - 如何在 Django 中响应 ajax 请求

    Python在函数中导入包

    search - 检索与具有 k 个最近邻居的输入树最接近的树?

    python - Pytables EArray 与 Table 的速度/效率比较

    matlab - 有没有使用Matlab计算Precision和Recall的函数?

    r - R 中的 k-NN 回归问题

    c# - 如何在 C# 中针对大量维度最好地实现 K 最近邻?

    python - 如何在不同数组的 For In 中访问数组的特定单元格?