Код R caret / gbm не предскажет: dim(X) должен иметь положительную длину

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

Кажется, что работает модель, но не может создавать прогнозы.

predictions failed for Fold2: interaction.depth=4, shrinkage=0.005, n.trees=200 Error in apply(tmp, 2, function(x, nm = modelFit$obsLevels) ifelse(x >=  : 
  dim(X) must have a positive length

Вот полный код:

library(caret)
library(gbm)

myControl <- trainControl(method='cv', number=2, summaryFunction=twoClassSummary,
                          classProbs=TRUE, savePredictions=TRUE, verboseIter=TRUE)


df1 <- data.frame(Y = round(runif(1000), 0), x1=runif(1000), x2=runif(1000) )

X <- df1[,c('x1','x2')]
Y <- factor(paste('X', df1[,'Y']))


gbm_model <- train(X, Y, method='gbm', metric='ROC', trControl=myControl 
                   ,distribution='bernoulli', tuneGrid=expand.grid(.n.trees=seq(100, 200, by=100) 
                   ,.interaction.depth=seq(2, 4, by=2), .shrinkage=c(.005)))

Какие-либо предложения?

РЕДАКТИРОВАТЬ: я использую gbm 2.1 а также caret 5.16.24

2 ответа

Решение

Это ошибка. У меня была новая версия каретки для отправки сегодня, но я внесу эти изменения до ее отправки.

Есть небольшой разрыв между вашим кодом и выводом. Я получаю дополнительное предупреждение: "По крайней мере, один из уровней классов не являются допустимыми именами переменных R; это может привести к ошибкам, если вероятности классов генерируются, потому что имена переменных будут преобразованы в: X.0, X.1". Добавить sep = "" в paste команда, и это уходит.

Максимум

Вы также можете получить эту ошибку, если попытаетесь запустить каретную модель и по ошибке просто включите зависимую переменную только с одним фактором.

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