使用R中1到21之间的k的所有奇数值执行knn分类

使用R中1到21之间的k的所有奇数值执行knn分类,r,machine-learning,knn,R,Machine Learning,Knn,我正在尝试使用iris数据集执行knn,该数据集的多个奇数值为1-21(包括1-21)。合并所有knn并仍然获得正确结果的正确方法是否正确?另外,我如何创建结果的混淆矩阵并检查准确性 我在创建混淆矩阵和检查准确性时遇到以下错误 错误1:表格中的错误(knn_类,列车标签): 所有参数必须具有相同的长度 错误2:In==。默认值(knn_类,列车标签): 较长的对象长度不是较短对象长度的倍数 当我使用多个k执行knn时,train.labels小于knn\u class,但我不知道如何解决 这是我

我正在尝试使用iris数据集执行knn,该数据集的多个奇数值为1-21(包括1-21)。合并所有knn并仍然获得正确结果的正确方法是否正确?另外,我如何创建结果的混淆矩阵并检查准确性

我在创建混淆矩阵和检查准确性时遇到以下错误

错误1:表格中的错误(knn_类,列车标签): 所有参数必须具有相同的长度

错误2:In
==。默认值(knn_类,列车标签):
较长的对象长度不是较短对象长度的倍数

当我使用多个k执行knn时,
train.labels
小于
knn\u class
,但我不知道如何解决

这是我到目前为止的代码

library(class)
data(iris)

# Generate a random sample that is 2/3 of the total number of rows in dataset.
ran <- sample(2, nrow(iris), replace=TRUE, prob=c(0.80, 0.20))
ran

# Compose training labels
train.labels <- iris[ran==1, 5]

# Compose test labels
test.labels <- iris[ran==2, 5]

# Compose training set.
training <- iris[ran==1, 1:4]
data_train <- cbind(train.labels,training)

# Compose test set.
test <- iris[ran==2, 1:4]
data_test <- cbind(test.labels,test)

k_values <- seq(from=1, to=21, by=2)

knn_class <- sapply(k_values, function(k) {
  knn(train = training, test = test, cl = train.labels, k=k)
})
colnames(knn_class) <- c(1,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21)
summary(knn_class)
          1               3               5               7               9               11              13    
 setosa    :13   setosa    :13   setosa    :13   setosa    :13   setosa    :13   setosa    :13   setosa    :13  
 versicolor:11   versicolor:10   versicolor: 9   versicolor: 9   versicolor: 9   versicolor:10   versicolor:10  
 virginica : 9   virginica :10   virginica :11   virginica :11   virginica :11   virginica :10   virginica :10  
          15              17              19              21    
 setosa    :13   setosa    :13   setosa    :13   setosa    :13  
 versicolor:11   versicolor:11   versicolor:10   versicolor:11  
 virginica : 9   virginica : 9   virginica :10   virginica : 9  


# Checking Accuracy of knn.
# Error 1 here.
con_mat <- confusionMatrix(table(knn_class, train.labels))

# Error 2 here.
mean(knn_class == train.labels) # success rate
库(类)
数据(iris)
#生成数据集中总行数的2/3的随机样本。

ran第一个问题是,您正在使用训练标签来比较结果,这会给您不同的大小。KNN类是一个由25行到11列组成的矩阵。您需要将结果与测试标签进行比较

另一个错误是,您需要创建混淆矩阵,并计算每个K值的精度。此代码解决了您的问题:

accuracy <- c()
con_mat <- list()
for(i in 1:ncol(knn_class)) #iterating over columns
{
  con_mat[[i]] <- table(knn_class[,i], test.labels) #geting the confusion matrix
  accuracy = c(accuracy,mean(knn_class[,i] == test.labels)) #geting the accuracy 
}
准确度