用Caret调整的Xgboost超参数与h2o.grid返回的参数完全不同吗?

时间:2020-01-21 09:16:58

标签: r xgboost r-caret h2o

我在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    
        )

我用以下方法返回最佳模型:

modFit$bestTune enter image description here

有一条漂亮的曲线表明我的模型很健壮,并且在1200次迭代后没有过度拟合:

enter image description here

我想将此模型合并到仅使用保存为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:

enter image description here

herehere描述了解决此问题的建议解决方案(例如,使用循环并调用h2o.RemoveAll())。

我已经尝试过,但是在循环中进行了几次迭代后,我仍然遇到相同的错误。

现在给我的问题提供了用于调整模型的相同数据集,并且收敛曲线与上面显示的一样,我们可以期望careth2o.grid返回的最佳超参数完全不同

实际上,我想在caret中调用h2o.xgboost超参数来训练模型并做出预测。

0 个答案:

没有答案