'train' 和 'class' 在 R 中有不同的长度错误
'train' and 'class' have different lengths error in R
我只是想在k为3的情况下进行kNN分类。我想使用训练集预测有效集中的因变量“糖尿病”并计算准确性。
但我遇到了
的错误消息
Error in knn(train = TrainXNormDF, test = ValidXNormDF, cl = MLdata2[, : 'train' and 'class' have different lengths
我无法通过
的 get 方法解决此问题
for(i in ((length(MLValidY) + 1):length(TrainXNormDF)))+(MLValidY = c(MLValidY, 0))
我能为它做什么?请帮忙。
我的代码如下
install.packages("mlbench")
install.packages("gbm")
library(mlbench)
library(gbm)
data("PimaIndiansDiabetes2")
head(PimaIndiansDiabetes2)
MLdata <- as.data.frame(PimaIndiansDiabetes2)
head(MLdata)
str(MLdata)
View(MLdata)
any(is.na(MLdata))
sum(is.na(MLdata))
MLdata2 <- na.omit(MLdata)
any(is.na(MLdata2))
sum(is.na(MLdata2))
View(MLdata2)
MLIdx <- sample(1:3, size = nrow(MLdata2), prob = c(0.6, 0.2, 0.2), replace = TRUE)
MLTrain <- MLdata2[MLIdx == 1,]
MLValid <- MLdata2[MLIdx == 2,]
MLTest <- MLdata2[MLIdx == 3,]
head(MLTrain)
head(MLValid)
head(MLTest)
str(MLTrain)
str(MLValid)
str(MLTest)
View(MLTestY)
MLTrainX <- MLTrain[ , -9]
MLValidX <- MLValid[ , -9]
MLTestX <- MLTest[ , -9]
MLTrainY <- as.data.frame(MLTrain[ , 9])
MLValidY <- as.data.frame(MLValid[ , 9])
MLTestY <- as.data.frame(MLTest[ , 9])
View(MLTrainX)
View(MLTrainY)
library(caret)
NormValues <- preProcess(MLTrainX, method = c("center", "scale"))
TrainXNormDF <- predict(NormValues, MLTrainX)
ValidXNormDF <- predict(NormValues, MLValidX)
TestXNormDF <- predict(NormValues, MLTestX)
head(TrainXNormDF)
head(ValidXNormDF)
head(TestXNormDF)
install.packages('FNN')
library(FNN)
library(class)
NN <- knn(train = TrainXNormDF,
test = ValidXNormDF,
cl = MLValidY,
k = 3)
谢谢
您的 cl
变量与 train
变量的长度不同。 MLValidY
只有 74 个观测值,而 TrainXNormDF
有 224 个。
cl
应该为训练集中的每一行提供真实的分类。
此外,cl
是一个 data.frame 而不是向量。
尝试以下操作:
NN <- knn(train = TrainXNormDF,
test = ValidXNormDF,
cl = MLTrainY$`MLTrain[, 9]`,
k = 3)
如@rw2 所述,它是 cl
的长度。我认为您打算使用 MLtrainY
,而不是 MLvalidY
。当你有一个单列数据框时,你仍然可以 运行 进入形状问题(将其转换为向量)。您可以返回以确保您在此处使用了正确的内容,如下所示:
NN <- knn(train = TrainXNormDF,
test = ValidXNormDF,
cl = MLdata2[MLIdx == 1,]$diabetes, # shape no longer an issue
k = 3)
我只是想在k为3的情况下进行kNN分类。我想使用训练集预测有效集中的因变量“糖尿病”并计算准确性。
但我遇到了
的错误消息Error in knn(train = TrainXNormDF, test = ValidXNormDF, cl = MLdata2[, : 'train' and 'class' have different lengths
我无法通过
的 get 方法解决此问题for(i in ((length(MLValidY) + 1):length(TrainXNormDF)))+(MLValidY = c(MLValidY, 0))
我能为它做什么?请帮忙。
我的代码如下
install.packages("mlbench")
install.packages("gbm")
library(mlbench)
library(gbm)
data("PimaIndiansDiabetes2")
head(PimaIndiansDiabetes2)
MLdata <- as.data.frame(PimaIndiansDiabetes2)
head(MLdata)
str(MLdata)
View(MLdata)
any(is.na(MLdata))
sum(is.na(MLdata))
MLdata2 <- na.omit(MLdata)
any(is.na(MLdata2))
sum(is.na(MLdata2))
View(MLdata2)
MLIdx <- sample(1:3, size = nrow(MLdata2), prob = c(0.6, 0.2, 0.2), replace = TRUE)
MLTrain <- MLdata2[MLIdx == 1,]
MLValid <- MLdata2[MLIdx == 2,]
MLTest <- MLdata2[MLIdx == 3,]
head(MLTrain)
head(MLValid)
head(MLTest)
str(MLTrain)
str(MLValid)
str(MLTest)
View(MLTestY)
MLTrainX <- MLTrain[ , -9]
MLValidX <- MLValid[ , -9]
MLTestX <- MLTest[ , -9]
MLTrainY <- as.data.frame(MLTrain[ , 9])
MLValidY <- as.data.frame(MLValid[ , 9])
MLTestY <- as.data.frame(MLTest[ , 9])
View(MLTrainX)
View(MLTrainY)
library(caret)
NormValues <- preProcess(MLTrainX, method = c("center", "scale"))
TrainXNormDF <- predict(NormValues, MLTrainX)
ValidXNormDF <- predict(NormValues, MLValidX)
TestXNormDF <- predict(NormValues, MLTestX)
head(TrainXNormDF)
head(ValidXNormDF)
head(TestXNormDF)
install.packages('FNN')
library(FNN)
library(class)
NN <- knn(train = TrainXNormDF,
test = ValidXNormDF,
cl = MLValidY,
k = 3)
谢谢
您的 cl
变量与 train
变量的长度不同。 MLValidY
只有 74 个观测值,而 TrainXNormDF
有 224 个。
cl
应该为训练集中的每一行提供真实的分类。
此外,cl
是一个 data.frame 而不是向量。
尝试以下操作:
NN <- knn(train = TrainXNormDF,
test = ValidXNormDF,
cl = MLTrainY$`MLTrain[, 9]`,
k = 3)
如@rw2 所述,它是 cl
的长度。我认为您打算使用 MLtrainY
,而不是 MLvalidY
。当你有一个单列数据框时,你仍然可以 运行 进入形状问题(将其转换为向量)。您可以返回以确保您在此处使用了正确的内容,如下所示:
NN <- knn(train = TrainXNormDF,
test = ValidXNormDF,
cl = MLdata2[MLIdx == 1,]$diabetes, # shape no longer an issue
k = 3)