2013-08-02 7 views
1

Я пытаюсь использовать каретку, чтобы найти лучшие параметры для модели gbm. Этот код идентичен тому, что я использовал на других наборах данных, и не могу определить ошибку.R код каретки/gbm не будет прогнозировать: dim (X) должен иметь положительную длину

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

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))) 

Любые предложения?

EDIT: Я использую gbm 2.1 и caret 5.16.24

ответ

3

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

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

Макс.

+0

@topepp: Большое спасибо! – screechOwl