Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用R中k的最佳值从交叉验证结果创建混淆矩阵_R_Cross Validation_Knn_Confusion Matrix - Fatal编程技术网

尝试使用R中k的最佳值从交叉验证结果创建混淆矩阵

尝试使用R中k的最佳值从交叉验证结果创建混淆矩阵,r,cross-validation,knn,confusion-matrix,R,Cross Validation,Knn,Confusion Matrix,我在下面使用R中的iris数据集编写了knn交叉验证方法。我如何从中获得k的最佳值,并在此基础上创建混淆矩阵?任何帮助都会很好 library(class) data("iris") kfolds = 5 iris$folds = cut(seq(1,nrow(iris)),breaks=kfolds,labels=FALSE) iris$folds # Sets the columns to use as predicators pred = c("Petal.Width", "Petal.

我在下面使用R中的iris数据集编写了knn交叉验证方法。我如何从中获得k的最佳值,并在此基础上创建混淆矩阵?任何帮助都会很好

library(class)
data("iris")
kfolds = 5
iris$folds = cut(seq(1,nrow(iris)),breaks=kfolds,labels=FALSE)
iris$folds

# Sets the columns to use as predicators
pred = c("Petal.Width", "Petal.Length")
accuracies = c()
ks = c(1,3,5,7,9,11,13,15)
for (k in ks) {
  k.accuracies = c()
  for(i in 1:kfolds) {
    # Builds the training set and test set for this fold.
    train.items.this.fold  = iris[iris$folds != i,] 
    validation.items.this.fold = iris[iris$folds == i,]

    # Fit knn model on this fold.
    predictions = knn(train.items.this.fold[,pred], 
                      validation.items.this.fold[,pred], 
                      train.items.this.fold$Species, k=k)

    predictions.table <- table(predictions, validation.items.this.fold$Species)

    # Work out the amount of correct and incorrect predictions.
    correct.list <- predictions == validation.items.this.fold$Species
    nr.correct = nrow(validation.items.this.fold[correct.list,])

    # Get accuracy rate of cv.
    accuracy.rate = nr.correct/nrow(validation.items.this.fold)

    # Adds the accuracy list.
    k.accuracies <- cbind(k.accuracies, accuracy.rate)
  }
  # Adds the mean accuracy to the total accuracy list.
  accuracies <- cbind(accuracies, mean(k.accuracies))
}

# Accuracy for each value of k: visualisation.
accuracies
库(类)
数据(“iris”)
kfolds=5
虹膜$folds=cut(seq(1,nrow(虹膜)),breaks=kfolds,labels=FALSE)
鸢尾花$folds
#设置要用作谓词的列
pred=c(“花瓣宽度”、“花瓣长度”)
精度=c()
ks=c(1,3,5,7,9,11,13,15)
用于(k英寸ks){
k、 精度=c()
for(i in 1:kfolds){
#为此折叠构建训练集和测试集。
train.items.this.fold=iris[iris$fold!=i,]
validation.items.this.fold=iris[iris$fold==i,]
#将knn模型安装在此折叠上。
预测=knn(序列项目本次折叠[,预测],
validation.items.this.fold[,pred],
train.items.this.fold$Species,k=k)

predictions.table您的代码有一些问题,此代码运行:

library(class)
data("iris")
kfolds = 5
iris$folds = cut(seq(1,nrow(iris)),breaks=kfolds,labels=FALSE)
iris$folds

# Sets the columns to use as predicators
pred = c("Petal.Width", "Petal.Length")
accuracies = c()
ks = c(1,3,5,7,9,11,13,15)
k.accuracies = c()
predictions.list = list()
for (k in ks) {
  k.accuracies = c()
  for(i in 1:kfolds) {
    # Builds the training set and test set for this fold.
    train.items.this.fold  = iris[iris$folds != i,] 
    validation.items.this.fold = iris[iris$folds == i,]

    # Fit knn model on this fold.
    predictions = knn(train.items.this.fold[,pred], 
                      validation.items.this.fold[,pred], 
                      train.items.this.fold$Species, k=k)
    predictions.list[[i]] = predictions

    predictions.table <- table(predictions, validation.items.this.fold$Species)

    # Work out the amount of correct and incorrect predictions.
    correct.list <- predictions == validation.items.this.fold$Species
    nr.correct = nrow(validation.items.this.fold[correct.list,])

    # Get accuracy rate of cv.
    accuracy.rate = nr.correct/nrow(validation.items.this.fold)

    # Adds the accuracy list.
    k.accuracies <- cbind(k.accuracies, accuracy.rate)
  }
  # Adds the mean accuracy to the total accuracy list.
  accuracies <- cbind(accuracies, mean(k.accuracies))
}
accuracies


predictions.table <- table(predictions.list[[which.max(accuracies)]], validation.items.this.fold$Species)  
更新


创建一个列表来存储每个预测,然后使用最佳精度创建混淆矩阵。

非常感谢@FilipeLauar!我为最佳K创建了一个混淆矩阵。这是否正确?(请参阅问题中的更新):)不,这不正确,我正在用正确的代码更新我的答案。
library(class)
data("iris")
kfolds = 5
iris$folds = cut(seq(1,nrow(iris)),breaks=kfolds,labels=FALSE)
iris$folds

# Sets the columns to use as predicators
pred = c("Petal.Width", "Petal.Length")
accuracies = c()
ks = c(1,3,5,7,9,11,13,15)
k.accuracies = c()
predictions.list = list()
for (k in ks) {
  k.accuracies = c()
  for(i in 1:kfolds) {
    # Builds the training set and test set for this fold.
    train.items.this.fold  = iris[iris$folds != i,] 
    validation.items.this.fold = iris[iris$folds == i,]

    # Fit knn model on this fold.
    predictions = knn(train.items.this.fold[,pred], 
                      validation.items.this.fold[,pred], 
                      train.items.this.fold$Species, k=k)
    predictions.list[[i]] = predictions

    predictions.table <- table(predictions, validation.items.this.fold$Species)

    # Work out the amount of correct and incorrect predictions.
    correct.list <- predictions == validation.items.this.fold$Species
    nr.correct = nrow(validation.items.this.fold[correct.list,])

    # Get accuracy rate of cv.
    accuracy.rate = nr.correct/nrow(validation.items.this.fold)

    # Adds the accuracy list.
    k.accuracies <- cbind(k.accuracies, accuracy.rate)
  }
  # Adds the mean accuracy to the total accuracy list.
  accuracies <- cbind(accuracies, mean(k.accuracies))
}
accuracies


predictions.table <- table(predictions.list[[which.max(accuracies)]], validation.items.this.fold$Species)  
ks[which.max(accuracies)]