Ошибки каретки и GBM

Я пытаюсь использовать пакет caret в R для нескольких вложенных процессов перекрестной проверки с определяемыми пользователем показателями производительности. У меня были всевозможные проблемы, поэтому я отступил, чтобы посмотреть, есть ли проблемы с более нестандартным использованием caret, и, кажется, я столкнулся с одной из них.

Если я запускаю следующее:

install.packages("caret")
install.packages("gbm")
library(caret)
library(gbm)


data(GermanCredit)
GermanCredit$Class<-ifelse(GermanCredit$Class=='Bad',1,0)



gbmGrid <- expand.grid(.interaction.depth = 1,
                       .n.trees = 150,
                       .shrinkage = 0.1)


  
   gbmMOD <- train(Class~., data=GermanCredit
                ,method = "gbm",
             tuneGrid= gbmGrid,
                distribution="bernoulli",
                bag.fraction = 0.5, 
                train.fraction = 0.5, 
                n.minobsinnode = 10, 
                cv.folds = 1, 
                keep.data=TRUE,
                verbose=TRUE
                
)

Я получаю ошибку (или аналогичную):

Ошибка в {: задача 1 не выполнена — аргументы подразумевают разное количество строк: 619, 381

с предупреждениями:

1: In eval(expr, envir, enclos) :
  model fit failed for Resample01: interaction.depth=1, n.trees=150, shrinkage=0.1

Но если я запускаю только процедуру gbm, все заканчивается нормально.

gbm1 <- gbm(Class~., data=GermanCredit,
            distribution="bernoulli",
            n.trees=150, # number of trees
            shrinkage=0.10, 
            interaction.depth=1, 
            bag.fraction = 0.5,
            train.fraction = 0.5, 
            n.minobsinnode = 10, 
            cv.folds = 1, 
            keep.data=TRUE, 
            verbose=TRUE
)

person B_Miner    schedule 10.02.2013    source источник
comment
Я обнаружил, что ошибка возникает при добавлении аргумента cv.folds=1. cv.folds нужно передать в gbm, но по какой-то причине это вызывает ошибку. cv.folds=0 в любом случае является значением по умолчанию для gbm (что должно дать тот же результат, что и cv.folds=1).   -  person B_Miner    schedule 11.02.2013
comment
Обычный метод устранения предполагаемых ошибок — связаться с сопровождающим пакета.   -  person IRTFM    schedule 11.02.2013
comment
После публикации вопроса я выяснил, откуда возникла ошибка, и напишу Максу Куну по электронной почте.   -  person B_Miner    schedule 11.02.2013


Ответы (2)


Было две проблемы: передача cv.folds вызывала проблему. Кроме того, вам не нужно преобразовывать результат в двоичное число; это заставляет train думать, что это проблема регрессии. Идея функции train состоит в том, чтобы сгладить несоответствия с помощью функций моделирования, поэтому мы используем факторы для классификации и числа для регрессии.

person topepo    schedule 05.08.2013

Просто для заметки - хотя эта проблема была вызвана причиной, описанной в ответе, сообщение об ошибке (приведенное ниже) также может появляться в более старых версиях Caret и gbm. Я столкнулся с этой ошибкой, и, потратив много времени на то, чтобы выяснить, в чем проблема, оказалось, что мне пришлось перейти на самую последнюю версию Caret (5.17-7) и gbm (2.1-0.1). Это самая последняя версия на сегодняшний день на CRAN.

Error in { : 
task 1 failed - "arguments imply differing number of rows: ...
person xbsd    schedule 11.10.2013