首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“列车”和“类”在R中有不同的长度误差。

“列车”和“类”在R中有不同的长度误差。
EN

Stack Overflow用户
提问于 2022-02-10 14:31:30
回答 2查看 112关注 0票数 1

我只想对k为3时的情况进行kNN分类,利用训练集对因变量“糖尿病”进行预测,并计算其准确性。

但是我面对错误信息

Error in knn(train = TrainXNormDF, test = ValidXNormDF, cl = MLdata2[, : 'train' and 'class' have different lengths

我不能用get方法解决这个问题

代码语言:javascript
运行
复制
for(i in ((length(MLValidY) + 1):length(TrainXNormDF)))+(MLValidY = c(MLValidY, 0))

我能为它做些什么?请帮帮忙。

我的代码如下所示

代码语言:javascript
运行
复制
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)

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-10 14:48:43

cl变量与train变量的长度不同。MLValidY只有74个观测值,而TrainXNormDF只有224个。

cl应该为您的培训集中的每一行提供真正的分类。

此外,cl是一个data.frame而不是向量。

尝试以下几点:

代码语言:javascript
运行
复制
NN <- knn(train = TrainXNormDF, 
      test = ValidXNormDF,
      cl = MLTrainY$`MLTrain[, 9]`,
      k = 3)
票数 2
EN

Stack Overflow用户

发布于 2022-02-10 15:00:17

正如@rw2 2所指出的,它是cl的长度。我想你是想用MLtrainY,而不是MLvalidY。当您有单个列数据帧时,仍然会遇到形状问题(将其转换为向量)。您可以返回以确保您在这里使用正确的内容,如下所示:

代码语言:javascript
运行
复制
NN <- knn(train = TrainXNormDF, 
          test = ValidXNormDF,
          cl = MLdata2[MLIdx == 1,]$diabetes, # shape no longer an issue
          k = 3)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71066938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档