【问题标题】:Finding k-nearest neighbor for only one point (not an entire matrix) using R使用 R 仅查找一个点(不是整个矩阵)的 k 最近邻
【发布时间】:2012-12-11 02:26:45
【问题描述】:

是否有使用 R 为一个点搜索 k-最近邻(特别是 kd 树)的软件包或简单方法? 所有提供此功能的包(例如 RANN 或 FNN...)计算矩阵中所有点的 knn,我只需要为一个点计算。

例如,我有一个包含 10 个点“A”到“E”的矩阵,我想为“A”找到其他 4 个点(“B”到“E”)之间的 2 个最近邻点,而不做同样的事情计算数据集中所有行(不计算“B”、“C”、“D”、“E”的knn)

我希望我的问题很清楚,我的英语不好。

感谢您的帮助,

【问题讨论】:

    标签: r knn


    【解决方案1】:

    如果我理解正确,您可以使用 FNN 包来执行此操作:

    > library(FNN)
    > X <- matrix(runif(100), 5, 5)
    > X
              [,1]      [,2]      [,3]      [,4]      [,5]
    [1,] 0.7475301 0.6725876 0.2511358 0.5048512 0.1196027
    [2,] 0.5777907 0.6337206 0.8334608 0.5067914 0.6410024
    [3,] 0.5488786 0.9613076 0.2217271 0.6906149 0.7396482
    [4,] 0.8230380 0.8596784 0.6348114 0.6211107 0.3089131
    [5,] 0.6531433 0.8682462 0.2555402 0.2443061 0.5292509
    > knnx.dist(X[-1,], X[1, , drop=FALSE], k=2)
              [,1]     [,2]
    [1,] 0.4870996 0.531889
    > knnx.index(X[-1,], X[1, , drop=FALSE], k=2)
         [,1] [,2]
    [1,]    3    4
    

    请注意,knnx.index 的结果与传递给函数的矩阵相关,因此 3 和 4 实际上表示第 4 行和第 5 行是原始数据集。

    【讨论】:

    • knnx.dist() 的结果是什么意思?这些数字 0.4870996 和 0.531889 是怎么来的?这个函数是计算“k Nearest Neighbor Distances”,这些值是指点4和点1、点5和点1之间的距离吗?
    • 我的意思是为什么它与原点距离矩阵中的值不同?
    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多