错误:在使用Caret的“Train”功能时,nrow(x)== n不为TRUE

8

我有一个训练集,看起来像这样:

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是结果/因变量。我将NameAreaDay转换为因子,但我不确定是否应该将只取整数值1-12和0-1的MonthNight也转换为因子。

然后,我将数据转换为矩阵。

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,我也会遇到类似的错误。

有人知道是什么原因导致这个问题吗?


不确定错误在哪里,但你应该将“Month”和“Night”也转换为因子变量。 - ytk
我刚刚做了那个。那并没有解决错误。 - user5739619
2
y 应该是一个包含每个样本结果的数字或因子向量,而不是矩阵。尝试使用 train(y = trainDF$Name, ...);它在您的示例数据中会产生不同的错误,但也许在完整数据集上可以工作。 - Julius Vainora
尝试时我遇到了错误 至少一个类别级别不是有效的R变量名;当生成类别概率时,这将导致错误,因为变量名将被转换为ATTACK、VEHICLE、MOUSE等。请使用可以用作有效R变量名的因子级别(参见?make.names以获取帮助)。 但是根据 str(trainDF$Name)Name 已经是一个因子了。所以我不理解这个错误。 - user5739619
我明白了,也许是因为Name中的某些值无效。其中一些值是Hit RunHome Run等等。那么也许是空格导致的问题?我该如何解决呢? - user5739619
@user5739619,那么,我的回答有帮助吗? - Julius Vainora
2个回答

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

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

帮助,其中make.names修改值,使其成为有效的变量名。


0

尽管在train的帮助文件中说可以使用矩阵或数据框,但您可以尝试将矩阵转换为数据框:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接