Как сделать H2OGridSearch для H2OGradientBoostingEstimator повторяемым (воспроизводимость) в искровой среде? - PullRequest
0 голосов
/ 03 октября 2018

Я использую следующий код для запуска GBM в Sparkling Water.Я настроил seed и score_each_iteration, но каждый раз, когда я проверяю AUC, он все равно дает разные результаты, даже если я установил seed и score_each_iteration = True.

from h2o.grid.grid_search import H2OGridSearch
from h2o.estimators.gbm import H2OGradientBoostingEstimator

# initialize the estimator
gbm_cov = H2OGradientBoostingEstimator(sample_rate = 0.7, col_sample_rate = 0.7, ntrees = 1000, balance_classes=True , score_each_iteration=True, nfolds=5, seed = 1234)

# set up hyper parameter search space
gbm_hyper_params = {'learn_rate': [0.01, 0.015, 0.025, 0.05, 0.1],
                     'max_depth': [3, 5, 7, 9, 12],
                     #'sample_rate': [i * 0.1 for i in range(6, 11)],
                     #'col_sample_rate': [i * 0.1 for i in range(6, 11)],
                     #'ntrees': [i * 100 for i in range(1, 11)]
                }

# define Search criteria
gbm_search_criteria = {'strategy': "RandomDiscrete", 
                        'max_models': 10, 
                        'max_runtime_secs': 1800,
                        'stopping_metric': eval_metric, 
                        'stopping_tolerance': 0.001, 
                        'stopping_rounds': 3,
                        'seed': 1
                       }

# build grid search 
gbm_grid = H2OGridSearch(model = gbm_cov,
                     hyper_params = gbm_hyper_params,
                     search_criteria = gbm_search_criteria # we can use "Cartesian" if search space is small
                    )

# train using the grid
gbm_grid.train(x = top_feature, y = y, training_frame =htrain)

1 Ответ

0 голосов
/ 03 октября 2018

закомментируйте 'max_runtime_secs': 1800 может решить проблему воспроизводимости.Я обнаружил еще одну вещь, но я не знаю, почему, если мы переместим код ранней остановки из критериев поиска в H2OGradientBoostingEstimator, код будет работать быстрее.

'stopping_metric': eval_metric, 
'stopping_tolerance': 0.001, 
'stopping_rounds': 3,
...