использование пакета Caret для поиска оптимальных параметров GBM

Я использую пакет R GBM для ускорения, чтобы выполнить регрессию для некоторых биологических данных размерами 10 000 X 932, и я хочу знать, каковы наилучшие настройки параметров для пакета GBM, особенно (n.trees, усадка, взаимодействие.глубина и n. minobsinnode), когда я искал в Интернете, я обнаружил, что пакет CARET на R может найти такие настройки параметров. Однако у меня возникли трудности с использованием пакета Caret с пакетом GBM, поэтому я просто хочу знать, как использовать курсор, чтобы найти оптимальные комбинации ранее упомянутых параметров? Я знаю, что это может показаться очень типичным вопросом, но я прочитал руководство по каретке и все еще испытываю трудности с интеграцией каретки с gbm, особенно потому, что я новичок в обоих этих пакетах.


person DOSMarter    schedule 25.03.2013    source источник


Ответы (2)



Не уверен, что вы нашли то, что искали, но я нахожу некоторые из этих листов менее чем полезными.

Если вы используете пакет Caret, ниже описаны необходимые параметры: > getModelInfo()$gbm$parameters

Вот несколько практических правил для запуска GBM:

  1. Interaction.depth равен 1, и для большинства наборов данных это кажется адекватным, но для некоторых я обнаружил, что проверка результатов на нечетные множители до максимума дала лучшие результаты. Максимальное значение, которое я видел для этого параметра, — это floor(sqrt(NCOL(обучение))).
  2. Усадка: чем меньше число, тем лучше прогностическая ценность, тем больше требуется деревьев и тем больше вычислительные затраты. Проверка значений на небольшом подмножестве данных с помощью чего-то вроде усадки = усадки = последовательности (0,0005, 0,05, 0005) может помочь в определении идеального значения.
  3. n.minobsinnode: по умолчанию 10, и обычно я не связываюсь с этим. Я пробовал c(5,10,15,20) на небольших наборах данных и не увидел адекватной отдачи от вычислительных затрат.
  4. п.деревья: чем меньше усадка, тем больше должно быть деревьев. Начните с n.trees = (0:50)*50 и соответствующим образом настройте.

Пример настройки с помощью пакета Caret:

getModelInfo()$gbm$parameters
library(parallel)
library(doMC)
registerDoMC(cores = 20)
# Max shrinkage for gbm
nl = nrow(training)
max(0.01, 0.1*min(1, nl/10000))
# Max Value for interaction.depth
floor(sqrt(NCOL(training)))
gbmGrid <-  expand.grid(interaction.depth = c(1, 3, 6, 9, 10),
                    n.trees = (0:50)*50, 
                    shrinkage = seq(.0005, .05,.0005),
                    n.minobsinnode = 10) # you can also put something        like c(5, 10, 15, 20)

fitControl <- trainControl(method = "repeatedcv",
                       repeats = 5,
                       preProcOptions = list(thresh = 0.95),
                       ## Estimate class probabilities
                       classProbs = TRUE,
                       ## Evaluate performance using
                       ## the following function
                       summaryFunction = twoClassSummary)

# Method + Date + distribution
set.seed(1)
system.time(GBM0604ada <- train(Outcome ~ ., data = training,
            distribution = "adaboost",
            method = "gbm", bag.fraction = 0.5,
            nTrain = round(nrow(training) *.75),
            trControl = fitControl,
            verbose = TRUE,
            tuneGrid = gbmGrid,
            ## Specify which metric to optimize
            metric = "ROC"))

Вещи могут меняться в зависимости от ваших данных (например, распределения), но я обнаружил, что ключ в том, чтобы играть с gbmgrid, пока вы не получите результат, который ищете. Настройки в том виде, в каком они есть сейчас, потребуют много времени для запуска, поэтому измените их в зависимости от вашей машины и времени. Чтобы дать вам примерное представление о вычислениях, я работаю на ядре Mac PRO 12 с 64 ГБ оперативной памяти.

person Shanemeister    schedule 06.06.2016