好吧,我无法解决您的问题,因为我没有样本数据。不过,我可以为您澄清文档中的示例,这样您就可以先了解发生了什么。
这里使用了一个内置的数据集 iris 来模拟“已知数据”。采用训练数据集,以便每个物种的数量相等(s - Setosa,c - Versicolor,v - Virginica)。
train <- rbind(iris3[1:25,,1], iris3[1:25,,2], iris3[1:25,,3])
cl <- factor(c(rep("s",25), rep("c",25), rep("v",25)))
-
test 是您尝试分类的数据集。给定一个现有的(经过训练的)knn 结构,逐行分析测试观察结果,并生成预测。
相同的数据集用于构建测试数据。当然,我们知道这里真正的分类,但我们假装不知道。真分类和以前一样; knn 不能使用它:对于 knn,此信息不可用。我们存储这些数据是为了估计我们的预测。
test <- rbind(iris3[26:50,,1], iris3[26:50,,2], iris3[26:50,,3])
cl.test <- cl
最后,我们准备好继续了。这是测试数据集的预测向量。如果 prob=TRUE,我们还会看到算法对每种情况的“自信”程度:
pr.test <- knn(train, test, cl, k = 3, prob=TRUE)
[1] s s s s s s s s s s s s s s s s s s s s s s s s s c c v c c c c c v c c c c c c c c c c
[45] c c c c c c v c c v v v v v c v v v v c v v v v v v v v v v v
attr(,"prob")
[1] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[9] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[17] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[25] 1.0000000 1.0000000 1.0000000 0.6666667 1.0000000 1.0000000 1.0000000 1.0000000
[33] 1.0000000 0.6666667 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[41] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
[49] 1.0000000 1.0000000 1.0000000 0.6666667 0.7500000 1.0000000 1.0000000 1.0000000
[57] 1.0000000 1.0000000 0.5000000 1.0000000 1.0000000 1.0000000 1.0000000 0.6666667
[65] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 0.6666667
[73] 1.0000000 1.0000000 0.6666667
Levels: c s v
我们现在可以估计我们的模型有多正确。
sum(pr.test==cl.test)/length(cl.test)
75 个中有 70 个是正确的,即 93%。
有关 knn 工作原理的更多详细信息,请参阅统计文献。对于您的问题,请考虑使用交叉验证技术来调整模型。