2016-02-20 106 views
7

使用車的時候nrow(X)== n是不是真的,我有一個訓練集,看起來像錯誤:在插入符號

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,AreaDay轉換爲因子,但我不確定是否應該爲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 TRUEmodel<-train

我也得到了類似的錯誤如果我用xgboost而不是nnet

任何人都知道這是什麼造成的?

+0

不確定錯誤,但您應該將'Month'和'Night'轉換爲因子變量。 – ytk

+0

我剛剛那樣做了。這並沒有解決錯誤 – user5739619

+1

'y'應該是一個數字或因子向量,其中包含每個樣本的結果,而不是一個矩陣。試試'train(y = trainDF $ Name,...';它會給你的示例數據帶來不同的錯誤,但是它可能會與完整的數據集一起工作 – Julius

回答

10

y應該是一個數字或係數向量包含每個樣本的結果,而不是矩陣。使用

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

幫助,其中make.names修改值,以便他們可以有效的變量名。

0

即使在train幫助文件所述任maxtrix或數據幀所預期的,但你可以嘗試將矩陣轉換爲數據幀:

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

當我嘗試這個時,我得到和以前一樣的錯誤 – user5739619