这是您尝试使用 R 中包含的 iris 数据集执行的操作的示例。首先,我们需要训练和测试数据子集:
library(class)
data(iris)
set.seed(42)
idx <- seq(nrow(iris))
train <- unname(unlist(tapply(idx, iris$Species, sample, size=25)))
train <- sort(train)
test <- idx[!idx %in% train]
现在你可以使用最近邻函数了:
predict <- knn(iris[train, 1:4], iris[test, 1:4], iris$Species[train])
(conftbl <- table(Species=iris$Species[test], Predict=predict))
# Predict
# Species setosa versicolor virginica
# setosa 25 0 0
# versicolor 0 25 0
# virginica 0 2 23
Correct <- sum(diag(conftbl))/sum(conftbl) * 100
cat("Percent Correct = ", round(Correct, 2))
# Percent Correct = 97.33
请注意,在您的示例中,您在 train= 和 cl= 参数中都包含了一个列(第 3 列在两者中)。这意味着您使用类成员资格来预测循环的类成员资格。如果第 3 列是班级成员,您应该使用 train = train.norm.df[, c(1:2, 4:14)] 和 test = new.norm.df[, c(1:2, 4:14)]。