【发布时间】:2018-02-17 14:53:02
【问题描述】:
有没有办法提取网格搜索的每次迭代所需的时间/内存?我希望绘制一个结果指标(例如 AUC)与处理要求,以检查增加模型复杂性的成本效益。
【问题讨论】:
-
1. 没有理由说一次迭代与任何其他迭代具有相同的要求。他们几乎永远不会,因为每次迭代都有一组不同的超参数,比如树的数量、学习率等。2. 不,在做之前你无法知道。你只能记录你做了多长时间。
标签: r h2o grid-search
有没有办法提取网格搜索的每次迭代所需的时间/内存?我希望绘制一个结果指标(例如 AUC)与处理要求,以检查增加模型复杂性的成本效益。
【问题讨论】:
标签: r h2o grid-search
我假设“网格搜索的每次迭代”是指网格搜索中的每个模型。所以你问如何在网格搜索中找到模型训练时间。如果是这样,这里是如何做到这一点。
H2O 将模型开始时间存储在模型中(自 unix 纪元时间以来的毫秒数)。您可以使用它来确定模型之间的时间——这可以用来推断任何模型的训练时间(最后一个模型除外)。
在 R 中,模型开始时间存储在 my_model@model$start_time。
下面是一个使用 iris 数据集和 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
【讨论】: