Длина меток должна равняться количеству строк во входных данных

Я не знаю, почему я получаю эту ошибку! Мои данные training является разреженной матрицей

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

Я проверил свои данные и:

  • label.train это датафрейм
  • training не имеет всех нулевых строк или столбцов
  • все значения в training являются числовыми

PS. У меня огромные данные, поэтому я не могу опубликовать воспроизводимый код, просто нужны советы о том, что может быть не так от тех, кто столкнулся с этой ошибкой.

2 ответа

Решение

Вы получаете сообщение об ошибке, потому что ваши метки являются data.frame. Передача их в виде вектора или матрицы работает для меня.

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)

Скорее всего, в данных вашего другого скрипта не было отсутствующего (NA) значения. Когда вы разрежете (я предполагаю, что вы пытались использовать один столбец горячего кодирования) фрейм данных в матрицу, R автоматически удалит отсутствующее значение и, следовательно, ошибку.

Лучше всего использовать is.na для замены всех нулей на 0.

Другие вопросы по тегам