Отдельный определенный (!) Сеточный поиск для гиперпараметров для разных моделей в карете - PullRequest
0 голосов
/ 18 октября 2019

Я работаю над рабочим процессом с использованием пакетов caret и, в частности, пакетов caretEnsemble. Как я могу определить отдельные определенные (не случайные) сеточные поиски для каждой обученной модели? Если быть точным, я бы не хотел составлять модели с разными сетками гиперпараметров, а просто обучать отдельные модели с разными сетками. У меня есть следующая обучающая часть:

# Setting definitions for evaluation metric:
mapeexpSummary <- function (data,
    lev = NULL,
    model = NULL) {
    mape <- function(y, yhat) { mean(abs((y - yhat)/y))}
    c(
        RMSE=sqrt(mean((data$obs-data$pred)^2)),
        Rsquared=summary(lm(pred ~ obs, data))$r.squared)
}

metric_name <- 'Rsquared'
maximize_matric <- TRUE
crossvalidation_method <- "cv"

alg_list <- c("lm", 
"xgbTree",
"ranger",
"lasso")

fitControl <- trainControl(
  method = crossvalidation_method,
  number = 2,
  repeats = 2,
  summaryFunction = mapeexpSummary)


model_list <- caretList(market ~ .,
                         data = data_train,
                         trControl = fitControl,
                         methodList = alg_list,
                         continue_on_fail = FALSE,
                         metric = metric_name,
                         maximize = maximize_matric)

Сказав это, давайте предположим, что и xbgTree, и ranger имеют разные наборы гиперпараметров, которые должны быть получены с помощью mygrid_xgbTree и mygrid_ranger. Предполагая, что я хотел бы наблюдать за определенными сетками для этих двух моделей, вы можете сказать, как можно изменить приведенный выше код?

mygrid_xgbTree <-  expand.grid(nrounds = seq(from = 100, 
                                to = 1000, 
                                by = 150),
                                max_depth = c(2, 3, 4, 5,6, 
                                10, 20),
                                colsample_bytree = c(0.4, 
                                0.6, 0.8, 1.0),
                                min_child_weight = c(1, 2, 
                                3),
                                subsample = c(0.5, 0.75, 
                                1.0))

mygrid_ranger <- expand.grid(num.trees = seq(from = 100, 
              to = 1000, 
              by = 150), 
              mtry=seq(from = 5, 
              to = 50, 
              by = 10))
...