我正在寻找一个接受良好优化的函数n X n
距离矩阵并返回n X k
矩阵的索引k
第 i 行中第 i 个数据点的最近邻居。
我发现了无数的不同R
可以让您执行 KNN 的软件包,但它们似乎都在同一函数中包含距离计算和排序算法。特别是,对于大多数例程来说,主要参数是原始数据矩阵,而不是距离矩阵。就我而言,我在混合变量类型上使用非标准距离,因此我需要将排序问题与距离计算分开。
这并不完全是一个令人畏惧的问题——我显然可以使用order
在循环中运行函数以获得我想要的东西(请参阅下面的解决方案),但这远非最佳。例如,sort
功能与partial = 1:k
when k
较小(小于 11)会快得多,但不幸的是仅返回排序值而不是所需的索引。
尝试使用FastKNN https://cran.r-project.org/web/packages/FastKNN/FastKNN.pdfCRAN 包(尽管没有很好的文档记录)。它提供k.nearest.neighbors
可以给出任意距离矩阵的函数。下面有一个计算所需矩阵的示例。
# arbitrary data
train <- matrix(sample(c("a","b","c"),12,replace=TRUE), ncol=2) # n x 2
n = dim(train)[1]
distMatrix <- matrix(runif(n^2,0,1),ncol=n) # n x n
# matrix of neighbours
k=3
nn = matrix(0,n,k) # n x k
for (i in 1:n)
nn[i,] = k.nearest.neighbors(i, distMatrix, k = k)
注意:您可以随时查看 Cran 软件包列表中的 Ctrl+F='knn'
相关功能:https://cran.r-project.org/web/packages/available_packages_by_name.html https://cran.r-project.org/web/packages/available_packages_by_name.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)