2017-06-10 3 views
-1

Je ne sais pas pourquoi je reçois cette erreur! Mes données training est une matrice clairsemée.La longueur des étiquettes doit être égale au nombre de lignes dans les données d'entrée

dim(training) 
> 14407 161 

dim(label.train) 
> 14407 1 

xgb.train <- xgb.DMatrix(data = training, label = label.train) 
> Error in setinfo.xgb.DMatrix(dmat, names(p), p[[1]]) : 
The length of labels must equal to the number of rows in the input data 

J'ai vérifié mes données et:

  • label.train est un data.frame
  • training n'a pas toutes les lignes ou les colonnes zéro
  • toutes les valeurs training sont numériques

PS. Mes données sont énormes, donc je ne peux pas publier un code reproductible, juste besoin de conseils pour savoir ce qui pourrait être mauvais de ceux qui ont connu cette erreur.

Répondre

3

Vous obtenez l'erreur car vos étiquettes sont un data.frame. Les transmettre en tant que vecteur ou matrice fonctionne pour moi.

vec_y <- mtcars$vs 
mat_y <- as.matrix(mtcars$vs) 
df_y <- mtcars[,8,drop=FALSE] #column vs is the 8th column 

x <- as.matrix(mtcars[,-8]) #column vs is the 8th column 

#vector labels: works 
xgboost::xgb.DMatrix(data=x, label=vec_y) 
#matrix labels: works 
xgboost::xgb.DMatrix(data=x, label=mat_y) 
#df labels: doesnt work 
xgboost::xgb.DMatrix(data=x, label=df_y) 
+0

Wow, vous venez de me sauver de me suicider! Ce qui me rendait folle, c'est que j'avais le même code dans un script différent où cela fonctionnait sans problème. Quoi qu'il en soit, merci! – GreenManXY