我有一个训练集,看起来像这样:
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
是结果/因变量。我将Name
、Area
和Day
转换为因子,但我不确定是否应该将只取整数值1-12和0-1的Month
和Night
也转换为因子。
然后,我将数据转换为矩阵。
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
,我也会遇到类似的错误。
有人知道是什么原因导致这个问题吗?
y
应该是一个包含每个样本结果的数字或因子向量,而不是矩阵。尝试使用train(y = trainDF$Name, ...)
;它在您的示例数据中会产生不同的错误,但也许在完整数据集上可以工作。 - Julius Vainora至少一个类别级别不是有效的R变量名;当生成类别概率时,这将导致错误,因为变量名将被转换为ATTACK、VEHICLE、MOUSE等。请使用可以用作有效R变量名的因子级别(参见?make.names以获取帮助)。
但是根据str(trainDF$Name)
,Name
已经是一个因子了。所以我不理解这个错误。 - user5739619Name
中的某些值无效。其中一些值是Hit Run
、Home Run
等等。那么也许是空格导致的问题?我该如何解决呢? - user5739619