【发布时间】:2020-08-04 17:54:55
【问题描述】:
我正在尝试在回归模型上使用Hyperopt,这样它的一个超参数是按变量定义的,并且需要作为列表传递。例如,如果我有一个包含 3 个自变量(不包括常数)的回归,我会传递 hyperparameter = [x, y, z](其中 x, y, z 是浮点数)。
无论它们应用于哪个变量,此超参数的值都具有相同的界限。如果将此超参数应用于所有变量,我可以简单地使用hp.uniform('hyperparameter', a, b)。我想要的搜索空间是hp.uniform('hyperparameter', a, b) 长度为n 的笛卡尔积,其中n 是回归中的变量数(所以,基本上,itertools.product(hp.uniform('hyperparameter', a, b), repeat = n))
我想知道这在 Hyperopt 中是否可行。如果没有,欢迎对优化器提出任何建议。
【问题讨论】:
-
所以你想进行网格搜索或者你对笛卡尔积的意思是什么?
-
Gridsearch 只是关于搜索空间的众多优化方法之一,所以我不确定您为什么要专门询问它。您听起来好像搜索空间的选择取决于优化方法。
-
我很抱歉,但我有点困惑,你想要实现什么。您想要一个动态的 hyperopt 搜索空间,您只需为一个变量定义一个搜索空间,它会自动为您的回归的所有变量实现它?
-
对,举个例子:假设我们有一个二进制(为简单起见)超参数,它可以是 0 或 1。如果将其应用于所有变量,则搜索空间将为 [[0] , [1]]。我想要的是让它单独和独立地应用于每个变量。假设我们有 2 个变量,那么搜索空间将是 [[0, 0], [0, 1], [1, 0], [1, 1]]。这在使用 gridsearch 时很容易实现(并且您不需要 Hyperopt),但是评估所有点的成本很高,所以我想使用更有效的东西,比如贝叶斯优化(在本例中为 hyperopt.tpe)
-
换句话说,这就像将多个超参数设置为
hp.uniform('hyperparameter', a, b),然后将它们重新组合成一个列表以作为单个超参数提供给回归。我试过了,内核在一段时间后就死了,我不认为这是由于搜索空间爆炸,而是 Hyperopt 无法本地处理此类操作。
标签: python-3.x mathematical-optimization hyperopt