在R中运行Knn函数

8e2ybdfx  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(127)

我已经使用以下代码对我的数据集运行了Knn算法:

ran <- sample(1:nrow(Knn_data), 0.9*nrow(Knn_data))
nor <- function(x) { (x-min(x))/(max(x)-min(x))}
Knn_data_norm <- as.data.frame(lapply(Knn_data[,c(1,2,3,4,5,6,7)], nor))
summary(Knn_data_norm)
Knn_train <- Knn_data_norm[ran,]
Knn_test <- Knn_data_norm[-ran,]
Knn_target_category <- Knn_data[ran,8]
Knn_test_category <- Knn_data[-ran,8]
library(class)
pr <- knn(Knn_train, Knn_test, cl=Knn_target_category, k=3)

我一直收到错误:knn错误(Knn_train,Knn_test,cl = Knn_目标_类别,k = 3):'train'和'class'的长度不同如何更改类以使其长度相同?

e4eetjau

e4eetjau1#

如果没有数据,就无法重现结果。下面是使用R自带的iris数据集的代码。没有任何问题:

data(iris) # Four measurements on three species with 50 observations of each
library(class)
set.seed(42)  # Make the example reproducible
ran <- sample(1:nrow(iris), 0.9*nrow(iris))
nor <- function(x) { (x-min(x))/(max(x)-min(x))}
Knn_data_norm <- as.data.frame(lapply(iris[,1:4], nor))
Knn_train <- Knn_data_norm[ran,]
Knn_test <- Knn_data_norm[-ran,]
Knn_target_category <- iris[ran, 5]
Knn_test_category <- iris[-ran, 5]
pr <- knn(Knn_train, Knn_test, cl=Knn_target_category, k=3)
table(Knn_test_category, pr)
#                  pr
# Knn_test_category setosa versicolor virginica
#        setosa          5          0         0
#        versicolor      0          6         0
#        virginica       0          1         3

15个中有14个预测正确。另请注意,nrow(Knn_train)等于length(Knn_target_category)。您的错误消息表明您的数据不符合此条件。

相关问题