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 变量。我将 Name
、Area
和 Day
转换为因数,但我不确定我是否应该为 Month
和 Night
转换,它们只承担整数值分别为 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
修改值,以便它们可以是有效的变量名称。
我的训练集看起来像
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 变量。我将 Name
、Area
和 Day
转换为因数,但我不确定我是否应该为 Month
和 Night
转换,它们只承担整数值分别为 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
修改值,以便它们可以是有效的变量名称。