Я работаю над рабочим процессом с использованием пакетов 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))