在 R 中使用 k-NN(类包)的最近邻索引

Posted

技术标签:

【中文标题】在 R 中使用 k-NN(类包)的最近邻索引【英文标题】:Indexes of nearest neighbors using k-NN (class package) in R 【发布时间】:2015-01-21 04:45:08 【问题描述】:

我正在使用class包的knn函数:

k <- knn(train = training, test = testset, cl = classes, k = 1, prob = TRUE)

对于测试集中给定的例子,有什么方法可以获取训练数据中 k 个最近邻的索引?我在包的文档中没有找到任何相关信息! knn 函数只返回测试样例的分类概率,而不是每个测试样例的 k 个最近邻的索引。

提前致谢!

【问题讨论】:

忘了说这个问题问得好! 【参考方案1】:

你需要一个不同的包来做到这一点。您需要 R 中的 FNN 包和函数 get.knn。你可以阅读文档here

这是一个简单的例子:

library(FNN)
data <- cbind(1:100, 1:100)

a <- get.knn(data, k=3)

然后你输入这个来获取每条记录的 3 个最近邻居的索引:

> a$nn.index
       [,1] [,2] [,3]
  [1,]    2    3    4
  [2,]    1    3    4
  [3,]    2    4    1
  [4,]    3    5    2
  [5,]    6    4    3
  [6,]    5    7    4
  [7,]    6    8    5
  [8,]    9    7   10
  [9,]   10    8   11
 [10,]    9   11   12
 [11,]   12   10    9

【讨论】:

以上是关于在 R 中使用 k-NN(类包)的最近邻索引的主要内容,如果未能解决你的问题,请参考以下文章

K-近邻算法(K-NN)

使用 R 中的最近邻分类器分配类标签

K近邻法

R语言非参数方法:使用核方法和K-NN(k近邻算法)分类预测心脏病数据

高效的最近邻搜索特定任务?

K-近邻(KNN)算法