2016-02-20 62 views
7

Ho una serie di formazione che assomigliaErrore: nrow (x) == n non è vero quando si utilizza Allenati 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 è la variabile esito/dipendente. Ho convertito Name, Area e Day in fattori, ma non ero sicuro se dovevo per Month e Night, che assumono solo i valori interi 1-12 e 0-1, rispettivamente.

ho poi convertire i dati in matrice

ynn <- model.matrix(~Name , data = trainDF) 
mnn <- model.matrix(~ Day+Area +X + Y + Month + Night, data = trainDF) 

Ho poi messa a punto messa a punto dei parametri

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) 

Tuttavia, ottengo l'errore Error: nrow(x) == n is not TRUE per la model<-train

ho anche ottenere un simile errore se utilizzo xgboost anziché nnet

Qualcuno sa che cosa sta causando questo?

+0

Non sono sicuro dell'errore, ma è necessario convertire 'Month' e' Night' in variabili dei fattori. – ytk

+0

L'ho appena fatto. Questo non risolveva l'errore – user5739619

+1

'y' dovrebbe essere un vettore numerico o di fattore contenente il risultato per ciascun campione, non una matrice. Prova 'treno (y = trainDF $ Nome, ...'; dà diversi errori con i tuoi dati di esempio ma forse funzionerà con un set di dati completo. – Julius

risposta

10

y dovrebbe essere un vettore numerico o fattore contenente il risultato per ciascun campione, non una matrice. Utilizzando

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

aiuta, dove make.names modifica i valori in modo che potessero essere nomi di variabili validi.

0

Anche se nel file di aiuto di train detto sia maxtrix o frame di dati ci si aspetterebbe, ma si può provare a convertire la matrice di un frame di dati:

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

Quando provo questo, ottengo lo stesso errore di prima – user5739619