Пакет GBM и Caret: неверное количество интервалов

Хотя я определяю, что target <- factor(train$target, levels = c(0, 1)), приведенный ниже код выдает эту ошибку:

Ошибка в cut.default(y, unique(quantile(y, probs = seq(0, 1, length = cuts))), : неверное количество интервалов Кроме того: Предупреждающие сообщения: 1: В train.default(x, y , веса = w, ...): невозможно вычислить вероятности класса для регрессии

Что это значит и как это исправить?

  gbmGrid <- expand.grid(n.trees = (1:30)*10, 
                         interaction.depth = c(1, 5, 9), 
                         shrinkage = 0.1)

  fitControl <- trainControl(method = "repeatedcv", 
                             number = 5, 
                             repeats = 5, 
                             verboseIter = FALSE, 
                             returnResamp = "all",
                             classProbs = TRUE)

  target <- factor(train$target, levels = c(0, 1)) 

  gbm <- caret::train(target ~ .,
                      data = train,
                      #distribution="gaussian",
                      method = "gbm",
                      trControl = fitControl,
                      tuneGrid = gbmGrid)

  prob = predict(gbm, newdata=testing, type='prob')[,2]

person Klausos Klausos    schedule 20.02.2015    source источник
comment
Что такое train в target <- factor(train$target,...)?   -  person Marat Talipov    schedule 20.02.2015
comment
Попробуйте добавить summaryFunction = twoClassSummary в свою функцию trainControl и посмотрите, работает ли она.   -  person LyzandeR    schedule 21.02.2015


Ответы (1)


Во-первых, не делайте этого:

 target <- factor(train$target, levels = c(0, 1)) 

Вы получите предупреждение:

По крайней мере один из уровней класса не является допустимым именем переменной R; Это может вызвать ошибки, если генерируются вероятности классов, потому что имена переменных будут преобразованы в: X0, X1

Во-вторых, вы создали объект с именем target. Использование метода формулы означает, что train будет использовать столбец с именем target во фрейме данных train, а это разные данные. Измените столбец.

person topepo    schedule 27.02.2015