使用类包中的 knn() 在 R 中查找 k-Nearest-Neighbor

Posted

技术标签:

【中文标题】使用类包中的 knn() 在 R 中查找 k-Nearest-Neighbor【英文标题】:Finding k-Nearest-Neighbor in R with knn() from class package 【发布时间】:2015-04-17 11:02:21 【问题描述】:

这是家庭作业。

我有 2 个矩阵,1 个用于训练,1 个用于测试。 数据有两列数据用于分类,第三列是已知类别。两个矩阵都有第三列。

    [1] [2] [3]
[1] 6.4 0.32 2
[2] 4.8 0.34 0
[3] 4.9 0.25 2
[4] 7.2 0.32 1

其中的整数是类(从 0 到 2)。

我的数据集的维度是训练集 100 3 和测试集 38 3。

我尝试使用类库的 knn() 函数。

knn 使用以下参数:(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)

我曾尝试直接使用我的数据集,但随后出现错误:“'train' and 'class' have different lengths”

我已经尝试了一些东西,但是几个小时后我被卡住了。目前我的编辑器中有这段代码:

cl <- t(factor(c(rep("0",1), rep("1",1), rep("2",1))))
k <- knn(train, test, cl)

但它不起作用。有人可以帮我吗?

我想用 3 个不同的 k 值运行函数,并找出每个的准确度。之后我将进行 5 折交叉验证最佳 k。

【问题讨论】:

***.com/questions/16276388/… 【参考方案1】:

正如文档所述,clfactor of true classifications of the training set,即您的 y 变量(训练集的第三列)。

这意味着函数应该如下:

cl <- factor(c(2,0,2,1)) #or alternatively factor(train[,3])
k <- knn(train[,c(1,2)], test[,c(1,2)], cl)

正如您在训练和测试集中看到的那样,y 变量(包含类的列)不包含在测试和训练集中。该列仅作为cl 参数中的一个因素。

您收到的错误是因为训练集的行数不等于因子的长度,在这种情况下它只有 3 个元素(这是因为您认为您只需要指定因子的级别那里)。

【讨论】:

以上是关于使用类包中的 knn() 在 R 中查找 k-Nearest-Neighbor的主要内容,如果未能解决你的问题,请参考以下文章

高效的knn算法

在 R 中调整 knn train() 命令中的 K

R中的Knn回归

2. KNN和KdTree算法实现

R中的KNN混淆矩阵?

如何将 knn 模型用于 R 中的新数据?