h2o.grid in R - 每次迭代的访问处理时间

h2o.grid in R - Accessing processing time for each iteration

有什么方法可以提取每次网格搜索迭代所需的 time/memory 吗?我希望绘制结果指标(例如 AUC)与处理要求的关系图,以检查为我的模型增加复杂性的成本效益。

我假设 "each iteration of the grid search",你指的是网格搜索中的每个模型。所以你问的是如何在网格搜索中找到模型训练时间。如果是这样,这里是如何做到这一点。

H2O 将模型开始时间存储在模型中(自 unix 纪元时间以来的毫秒数)。您可以使用它来确定模型之间的时间——这可用于推断任何模型(最后一个模型除外)的训练时间。

在R中,模型开始时间存储在my_model@model$start_time。 这是一个使用鸢尾花数据集和 GBM 网格的示例:

library(h2o)
h2o.init()

# Load iris dataset 
data("iris")
train <- as.h2o(iris)


# GBM hyperparamters 
gbm_params <- list(learn_rate = seq(0.01, 0.1, 0.01),
                    max_depth = seq(2, 10, 1),
                    sample_rate = seq(0.5, 1.0, 0.1),
                    col_sample_rate = seq(0.1, 1.0, 0.1)) 
search_criteria <- list(strategy = "RandomDiscrete", max_models = 5)

# Train and cross-validate a grid of GBMs 
gbm_grid <- h2o.grid("gbm", x = 1:4, y = 5,
                      training_frame = train,
                      nfolds = 3,
                      ntrees = 100,
                      seed = 1,
                      hyper_params = gbm_params,
                      search_criteria = search_criteria)

# Model Start times (milliseconds since unix epoch) 
start_times <- sort(sapply(gbm_grid@model_ids, function(m) h2o.getModel(m)@model$start_time))

# Model training times (milliseconds) 
train_time_ms <- start_times[2:length(start_times)] - start_times[1:(length(start_times)-1)] 
print(train_time_ms)
# 758 662 532 469