Hyperopt库中的重复试验

时间:2019-11-29 17:40:29

标签: python parameters hyperopt

我正在使用hyperopt库来调整模型。

这是我的搜索空间:

search_space = {
            'max_df': hp.choice('max_df', [1, 0.95, 0.9]),
            'cls': hp.choice('cls', ['A', 'B', 'C', 'D', 'E', 'F', 'G',
                                     ]),
            'ngram_range': hp.choice('ngram_range', [
                (2,3), (2,4), (2,5), (2,6),
                (3,4), (3,5), (3,6),
                (4,5), (4,6), (5,6)
            ]),
        }

这是我的代码:

trials = Trials()
best = fmin(self.objective_function, space=search_space, algo=tpe.suggest, max_evals=140, trials=trials)
bp = trials.best_trial['result']['Params']
print(bp)

根据我拥有的可能参数的数量,库应完成210迭代以完成搜索过程(3 * 7 * 10)

我将参数max_evals设置为140,该参数小于可能的总数。

每次迭代后,我都会保存分数中的参数。我发现的是,即使我在较低的空间(140而不是210)中进行搜索,也有带有重复参数的试验(迭代)。

hyperopt库是否遵循Gridsearch技术,或者在每个试验中都采用参数的随机组合?

我要问的是参数选择过程,而不是优化技术(例如Bayesian优化)。

1 个答案:

答案 0 :(得分:1)

在您的代码中,您使用的是tpe(树状结构的Parzen估计器),您可以在this paper by the author of hyperopt中了解更多信息。我在这里不能过多地告诉您有关此算法的信息,但是请注意,每次这样的搜索都将以预定义的“启动”时期开始。默认情况下,Hyperopt使用20个随机试验来“播种” TPE see here。由于您的搜索空间很小,而且这些随机试验是独立挑选的,因此可能已经可以解释您的重复项了。

如果愿意,也可以使用纯随机搜索或hyperopt中称为ATPE的变体来代替TPE。