使用 class 包中的 knn() 在 R 中查找 k 最近邻

Finding k-Nearest-Neighbor in R with knn() from class package

这是家庭作业。

我有 2 个矩阵,1 个用于训练,1 个用于测试。 数据有两列数据应用于 classification 和第三列已知 class。两个矩阵都有第三列。

    [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

其中整数是 classes(从 0-2)。

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

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

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

我曾尝试直接使用我的数据集,但随后出现错误:“'train' 和 'class' 的长度不同”

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

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

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

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

如文档所述,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 个元素(这是因为您认为您只需要指定那里的因素)。