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

时间:2018-09-20 22:05:00

标签: python h2o

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

在使用Python API的两个地方可以指定种子

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

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

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

从API docs中可以看到没有提供任何Seed参数。

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)

documentation中,是估算器种子的定义。

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

2)H2OGridSearch中的search_criteria。对于docs

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

尽管您可以将种子参数传递给train方法以进行网格搜索,而不会发生任何中断,但那里的seed参数却无济于事。如果要运行可重复的网格搜索,则需要像这样在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)