在R中绘制knn交叉验证的训练和测试错误率

在R中绘制knn交叉验证的训练和测试错误率,r,cross-validation,r-caret,knn,R,Cross Validation,R Caret,Knn,我在iris数据集上执行了以下交叉验证knn(使用插入符号包)。我现在正试图绘制结果的训练和测试错误率。这是我的尝试,但我无法获得错误率。有人能帮我吗 library(caret) data(iris) sample <- sample(2, nrow(iris), replace=TRUE, prob=c(0.80, 0.20)) iris.training <- iris[sample == 1, 1:4] iris.test <- iris[sample == 2, 1

我在iris数据集上执行了以下交叉验证knn(使用插入符号包)。我现在正试图绘制结果的训练和测试错误率。这是我的尝试,但我无法获得错误率。有人能帮我吗

library(caret)
data(iris)
sample <- sample(2, nrow(iris), replace=TRUE, prob=c(0.80, 0.20))

iris.training <- iris[sample == 1, 1:4]
iris.test <- iris[sample == 2, 1:4]

iris.trainLabels <- iris[sample == 1, 5]
iris.testLabels <- iris[sample == 2, 5]

# Combine training data and combine test data.
iris_train <- cbind(iris.trainLabels, iris.training)
iris_test <- cbind(iris.testLabels, iris.test)

trControl <- trainControl(method = "cv", number = 5)

# K values 1 3 5 7 9
k_values <- seq(from=1, to=10, by=2)

fit <- train(iris.trainLabels ~ ., method = "knn", tuneGrid = expand.grid(k = k_values), trControl = trControl, data = iris_train)

# Plot
bestK <- function(iris_train, iris.trainLabels, 
iris.testLabels) {
  ctr <- c(); cts <- c()
  for (k in length(k_values)) {
  fit <- train(iris.trainLabels ~ ., method = "knn", tuneGrid = expand.grid(k = k_values), trControl = trControl, data = iris_train)

  trTable <- prop.table(table(fit, iris.trainLabels))
  tsTable <- prop.table(table(fit, iris.testLabels))

  erTr <- trTable[1,2] + trTable[2,1]
  erTs <- tsTable[1,2] + tsTable[2,1]

  ctr <- c(ctr,erTr)
  cts <- c(cts,erTs)
} 
 err <- data.frame(k=k_values, trER=ctr, tsER=cts)
 return(err)
} 

err <- bestK(iris_train, iris.trainLabels, iris.testLabels)

plot(err$k,err$trER,type='o',ylim=c(0,.5),xlab="k",ylab="Error rate",col="blue")
lines(err$k,err$tsER,type='o',col="red")
库(插入符号)
数据(iris)

示例当我尝试运行您的
error_df@ulfelder时,我收到一条错误消息。我试图绘制与交叉验证knn结果相关的训练和测试错误。正如我在问题中所说的,这只是我的尝试,但我无法找到另一种方法来描绘结果。我已经研究并找到了我需要的东西,并用它编辑了问题。然而,当调用函数bestK时,我在knn(iris\u-train,iris\u-train,iris.trainLabels,k)中得到一个错误
错误:在外部函数调用(arg 6)
中的NA/NaN/Inf。代码中的
train
函数生成一个
精度
列。错误率可视为
1-准确率
。这就是你想要的吗?这能回答你的问题吗?