Как интерпретировать/настроить полиномиальную классификацию с помощью Caret-GBM?

Два вопроса

  1. Визуализация ошибки модели
  2. Расчет потери журнала

(1) Я пытаюсь настроить полиномиальный классификатор GBM, но не знаю, как адаптировать его к выходным данным. Я понимаю, что LogLoss предназначен для минимизации, но на приведенном ниже графике для любого диапазона итераций или деревьев он только увеличивается.

inTraining <- createDataPartition(final_data$label, p = 0.80, list = FALSE)
training <- final_data[inTraining,]
testing <- final_data[-inTraining,]

fitControl <- trainControl(method = "repeatedcv", number=10, repeats=3, verboseIter = FALSE, savePredictions = TRUE, classProbs = TRUE, summaryFunction= mnLogLoss)


gbmGrid1 <- expand.grid(.interaction.depth = (1:5)*2, .n.trees = (1:10)*25, .shrinkage = 0.1, .n.minobsinnode = 10)

gbmFit1 <- train(label~., data = training, method = "gbm", trControl=fitControl,
                   verbose = 1, metric = "ROC", tuneGrid = gbmGrid1)

plot(gbmFit1)

-- (2) в соответствующей заметке, когда я пытаюсь напрямую исследовать mnLogLoss, я получаю эту ошибку, которая не позволяет мне попытаться количественно определить ошибку.

mnLogLoss(testing, levels(testing$label)) : 'lev' cannot be NULL

person gbmforgbm    schedule 02.06.2020    source источник
comment
Я собрал ответ для графика. вообще старайтесь не задавать несколько вопросов. Я не могу воспроизвести вашу ошибку без примера. Поэтому я призываю вас опубликовать еще один вопрос, если у вас все еще есть проблемы с этим.   -  person StupidWolf    schedule 21.06.2020


Ответы (1)


Я подозреваю, что вы установили слишком высокую скорость обучения. Итак, используя пример набора данных:

final_data = iris
final_data$label=final_data$Species
final_data$Species=NULL
inTraining <- createDataPartition(final_data$label, p = 0.80, list = FALSE)
training <- final_data[inTraining,]
testing <- final_data[-inTraining,]

fitControl <- trainControl(method = "repeatedcv", number=10, repeats=3, 
verboseIter = FALSE, savePredictions = TRUE, classProbs = TRUE, summaryFunction= mnLogLoss)

gbmGrid1 <- expand.grid(.interaction.depth = 1:3, .n.trees = (1:10)*10, .shrinkage = 0.1, .n.minobsinnode = 10)

gbmFit1 <- train(label~., data = training, method = "gbm", trControl=fitControl,
                   verbose = 1, tuneGrid = gbmGrid1,metric="logLoss")

plot(gbmFit1)

введите здесь описание изображения

Немного отличается от вашего, но вы можете увидеть восходящий тренд после 20. Это действительно зависит от ваших данных, но если у вас высокая скорость обучения, вы очень быстро достигаете минимума, и все, что после этого, вносит шум. Вы можете увидеть эту иллюстрацию из книги Бемке, а также ознакомиться с другими обсуждение на основе статистики.

введите здесь описание изображения

Давайте снизим скорость обучения, и вы увидите:

gbmGrid1 <- expand.grid(.interaction.depth = 1:3, .n.trees = (1:10)*10, .shrinkage = 0.01, .n.minobsinnode = 10)

gbmFit1 <- train(label~., data = training, method = "gbm", trControl=fitControl,
                   verbose = 1, tuneGrid = gbmGrid1,metric="logLoss")

plot(gbmFit1)

введите здесь описание изображения

Обратите внимание, что вам, скорее всего, потребуется больше итераций, чтобы достичь меньших потерь, как вы видите с первым.

person StupidWolf    schedule 20.06.2020