Error: nrow(x) == n is not TRUE when using Train in Caret

Error: nrow(x) == n is not TRUE when using Train in Caret

我的训练集看起来像

Name       Day         Area         X    Y    Month Night
ATTACK    Monday   LA           -122.41 37.78   8      0
VEHICLE  Saturday  CHICAGO      -1.67    3.15   2      0
MOUSE     Monday   TAIPEI       -12.5    3.1    9      1

Name 是 outcome/dependent 变量。我将 NameAreaDay 转换为因数,但我不确定我是否应该为 MonthNight 转换,它们只承担整数值分别为 1-12 和 0-1。

然后我将数据转换成矩阵

ynn <- model.matrix(~Name , data = trainDF)
mnn <- model.matrix(~ Day+Area +X + Y + Month + Night, data = trainDF)

然后我设置调整参数

nnTrControl=trainControl(method = "repeatedcv",number = 3,repeats=5,verboseIter = TRUE, returnData = FALSE, returnResamp = "all", classProbs = TRUE, summaryFunction = multiClassSummary,allowParallel = TRUE)
nnGrid = expand.grid(.size=c(1,4,7),.decay=c(0,0.001,0.1))
model <- train(y=ynn, x=mnn, method='nnet',linout=TRUE, trace = FALSE, trControl = nnTrControl,metric="logLoss", tuneGrid=nnGrid)

但是,我得到 model<-train

的错误 Error: nrow(x) == n is not TRUE

如果我使用 xgboost 而不是 nnet

,我也会遇到类似的错误

有人知道这是什么原因吗?

虽然在train的帮助文件中说需要maxtrix或数据框,但您可以尝试将矩阵转换为数据框:

model <- train(y=ynn, x=as.data.frame(mnn), method='nnet',linout=TRUE, trace = FALSE, trControl = nnTrControl,metric="logLoss", tuneGrid=nnGrid)

y 应该是包含每个样本结果的数字或因子向量,而不是矩阵。使用

train(y = make.names(trainDF$Name), ...)

帮助,其中 make.names 修改值,以便它们可以是有效的变量名称。