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

我正在尝试使用iris数据集进行knn分类,使用1到21之间的多个奇数值(包括1和21)。这样组合所有knn分类是否能得到正确的结果?另外,如何创建结果的混淆矩阵并检查准确性?

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

错误1:在table(knn_class, train.labels)中出错:所有参数必须具有相同的长度

错误2:在==.default(knn_class, train.labels)中:较长对象的长度不是较短对象长度的倍数

因为我使用多个k值进行knn分类,train.labels的长度小于knn_class,但我不明白如何解决这个问题。

这是我目前的代码…

library(class)data(iris)# 生成一个随机样本,样本量为数据集总行数的2/3。ran <- sample(2, nrow(iris), replace=TRUE, prob=c(0.80, 0.20))ran# 组成训练标签train.labels <- iris[ran==1, 5]# 组成测试标签test.labels <- iris[ran==2, 5]# 组成训练集.training <- iris[ran==1, 1:4]data_train <- cbind(train.labels,training)# 组成测试集.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  # 检查knn的准确性。# 错误1在这里。con_mat <- confusionMatrix(table(knn_class, train.labels))# 错误2在这里。mean(knn_class == train.labels) # 成功率

任何帮助将不胜感激。


回答:

第一个问题是你使用训练标签来比较结果,这导致了不同的大小。KNN类是一个25行11列的矩阵。你需要用测试标签来比较结果。

另一个错误是你需要为每个K值创建混淆矩阵并计算准确性。以下代码解决了你的问题:

accuracy <- c()con_mat <- list()for(i in 1:ncol(knn_class)) #遍历列{  con_mat[[i]] <- table(knn_class[,i], test.labels) #获取混淆矩阵  accuracy = c(accuracy,mean(knn_class[,i] == test.labels)) #获取准确性 }

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注