Я настроил модель Xgboost с caret
в R:
xgb_grid_1 = expand.grid(
eta = c(0.01, 0.001, 0.0001),
max_depth = c(2, 4, 6, 8, 10, 15),
gamma = 1,
nrounds = 1200,
colsample_bytree = 1,
min_child_weight = 1,
subsample = 1
)
xgb_trcontrol_1 <-
trainControl(
verbose = TRUE,
method = "cv",
# K-fold cross validation
number = 3,
summaryFunction = defaultSummary,
allowParallel = TRUE
)
modFit = train(my_target ~ .,
data=training_data,
trControl = xgb_trcontrol_1,
tuneGrid = xgb_grid_1,
method = "xgbTree",
metric = 'RMSE',
maximize = FALSE,
nthread = 1
)
Я возвращаю лучшую модель с:
modFit$bestTune
И у меня есть хорошая кривая, показывающая, что моя модель устойчива и нет переоснащения около 1200 итераций:
Я хотел бы включить эту модель в конвейер, который использует только модели H2O, которые сохраняются как mojo. Тогда я думаю, что будет лучше тренировать модель с h2o.grid
:
# Train the grid, straigthforward but too long to train
xgb_grid <- h2o.grid(algorithm = "xgboost",
y = my_target , x = model_vars,
training_frame = training_data,
nfolds = 3,
seed = 1,
hyper_params = hyper_params,
search_criteria = search_criteria)
Но я столкнулся с ошибкой MemoryError:
Предлагаемые решения для этого описаны здесь и здесь (например, для использования al oop и вызова h2o.RemoveAll()
).
Я пытался это, но у меня все еще остается та же ошибка после нескольких итераций в l oop.
Теперь мой вопрос задается тем же набором данных, который использовался для настройки модели, и можно ли изобразить кривую сходимости, как показано выше ожидаем, что лучшие гиперпараметры, возвращаемые caret
и h2o.grid
, будут совершенно разными.
На самом деле, я бы хотел назвать caret
гиперпараметры в h2o.xgboost
для обучения модели и прогнозирования.