我在R中用caret
调整了Xgboost模型:
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
)
我用以下方法返回最佳模型:
有一条漂亮的曲线表明我的模型很健壮,并且在1200次迭代后没有过度拟合:
我想将此模型合并到仅使用保存为mojo的h2o模型的管道中。然后,尽管使用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:
here和here描述了解决此问题的建议解决方案(例如,使用循环并调用h2o.RemoveAll()
)。
我已经尝试过,但是在循环中进行了几次迭代后,我仍然遇到相同的错误。
现在给我的问题提供了用于调整模型的相同数据集,并且收敛曲线与上面显示的一样,我们可以期望caret
和h2o.grid
返回的最佳超参数完全不同
实际上,我想在caret
中调用h2o.xgboost
超参数来训练模型并做出预测。