Python Hyperopt库中的重复试验

Python Hyperopt库中的重复试验,python,parameters,hyperopt,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

我正在使用
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技术,还是在每次试验中随机组合参数


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

在您的代码中,您使用的是
tpe
(树结构Parzen估计器),您可以在中了解更多。关于这个算法,我不能告诉你太多,但请注意,每次这样的搜索都会从一个预定义的“启动”期开始。Hyperopt默认使用20个随机试验“播种”TPE。由于您的搜索空间相当小,而且这些随机试验是独立挑选的,这可能已经解释了您的重复

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