我看到在进行网格搜索以调整超参数时可以在一些地方设置种子,例如,可以在以下3个地方设置种子
这3个是不是多余的,我们只需要设置其中一个,或者每个角色扮演不同角色?
谢谢!
答案 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)