【发布时间】:2014-06-20 09:53:30
【问题描述】:
我正在寻找一个经过优化的函数,它接受一个n X n 距离矩阵并返回一个n X k 矩阵,其中包含第i 行中第i 个数据点的k 最近邻居的索引。
我发现了无数不同的 R 包,它们可以让你做 KNN,但它们似乎都在同一个函数中包含了距离计算和排序算法。特别是,对于大多数例程,主要参数是原始数据矩阵,而不是距离矩阵。就我而言,我在混合变量类型上使用了非标准距离,因此我需要将排序问题与距离计算分开。
这并不完全是一个令人生畏的问题——我显然可以在循环中使用order 函数来获得我想要的东西(请参阅下面的解决方案),但这远非最佳。例如,当k 很小(小于11)时,sort 函数和partial = 1:k 运行得更快,但不幸的是只返回排序值而不是所需的索引。
【问题讨论】:
-
library(class)有一个knn函数。也许检查一下。这是一个分类包。 -
是的,我在看
class::knn。像其他人一样,它采用原始数据并应用欧几里得距离。我没有看到直接给它一个距离矩阵的方法。 -
看看here。
straight_distance <- function(p,q){sqrt((p-q)^2)}不确定是不是这样,但您可能会在该页面上找到一些东西。
标签: r sorting matrix distance knn