错误:在Caret中使用Train时,nrow(x)== n不为TRUE

时间:2016-02-20 18:45:58

标签: r dataframe neural-network r-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是结果/因变量。我将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)

但是,我收到了Error: nrow(x) == n is not TRUE

的错误model<-train

如果我使用xgboost代替nnet

,我也会收到类似的错误

任何人都知道造成这种情况的原因是什么?

2 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:0)

即使在train的帮助文件中,也说明了maxtrix或数据帧,但您可以尝试将矩阵转换为数据帧:

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