对于在 Python 中使用 H2O 的网格搜索,我们应该在哪里设置种子?



我看到当我们进行网格搜索以调整超参数时,我们可以在几个地方设置种子,例如,我们可以在以下 3 个地方设置种子

  1. 当我们使用 H2OGradientBoostingEstimator 初始化估计器时,
  2. 当我们定义search_criteria时,我们也可以放种子
  3. 当我们开始使用定义的网格进行训练时,我们还可以将 seed 放入 train 函数中

这 3 个是多余的,我们只需要在其中之一中设置还是每个角色都扮演不同的角色?

谢谢!

在使用 Python API 时,有两个地方可以指定种子

1(估算器,让我们以GBM为例

gbm = H2OGradientBoostingEstimator(nfolds=5, seed=1234)
gbm.train(x=features,y=response,training_frame=train)

请注意,我没有在train方法中指定种子。如果将种子参数传递给train它将中断。

从 API 文档中,您可以看到未提供种子参数。

train(x=None, y=None, training_frame=None, offset_column=None, fold_column=None, weights_column=None, validation_frame=None, max_runtime_secs=None, ignored_columns=None, model_id=None, verbose=False)

此处的文档中是估算器种子的定义。

此选项为依赖于随机化的算法指定随机数生成器 (RNG( 种子。定义种子后,算法的行为将具有确定性。 每个 H2O 实例的种子是一致的,因此您可以在备用配置中创建具有相同起始条件的模型。

2(H2OGridSearch中的search_criteria。对于文档:

关于search_criteria的更多信息: 这是用于更智能超参数搜索的控制参数字典。字典可以包含以下值:策略、max_models、max_runtime_secs、stopping_metric、stopping_tolerance、stopping_rounds和种子。策略的默认值"笛卡尔"涵盖了超参数组合的整个空间。如果要使用笛卡尔网格搜索,可以不指定 search_criteria 参数。指定"随机离散"策略以对超参数的所有组合执行随机搜索。随机离散通常应与至少一个早期停止标准(max_models和/或max_runtime_secs(结合使用。下面是一些示例:

虽然您可以将种子参数传递给train方法进行网格搜索而不会中断任何内容,但那里的种子参数不执行任何操作。如果要运行可重现的网格搜索,则需要在 search_criteria 参数中指定种子参数,如下所示

# build grid search with previously made GBM and hyper parameters
grid = H2OGridSearch(model = my_model, hyper_params = hyper_params,
search_criteria = {'strategy': "RandomDiscrete", "max_runtime_secs" : 10, "seed" :1234})
# train using the grid
grid.train(x = predictors, y = response, training_frame = train, validation_frame = valid)

相关内容

最新更新