まず、組み合わせ前空間を dict として定義します。キーは名前です。値はタプルです。
from hyperopt import hp
space = {'foo': (hp.choice, (False, True)), 'bar': (hp.quniform, 1, 10, 1)}
次に、ループまたは を使用して、必要な組み合わせバリアントを生成しますitertools
。各名前は、サフィックスまたはプレフィックスを使用して一意に保たれます。
types = (1, 2)
space = {f'{name}_{type_}': args for type_ in types for name, args in space.items()}
>>> space
{'foo_1': (<function hyperopt.pyll_utils.hp_choice(label, options)>,
(False, True)),
'bar_1': (<function hyperopt.pyll_utils.hp_quniform(label, *args, **kwargs)>,
1, 10, 1),
'foo_2': (<function hyperopt.pyll_utils.hp_choice(label, options)>,
(False, True)),
'bar_2': (<function hyperopt.pyll_utils.hp_quniform(label, *args, **kwargs)>,
1, 10, 1)}
最後に、実際のhyperopt
スペースを初期化して作成します。
space = {name: fn(name, *args) for name, (fn, *args) in space.items()}
values = tuple(space.values())
>>> space
{'foo_1': <hyperopt.pyll.base.Apply at 0x7f291f45d4b0>,
'bar_1': <hyperopt.pyll.base.Apply at 0x7f291f45d150>,
'foo_2': <hyperopt.pyll.base.Apply at 0x7f291f45d420>,
'bar_2': <hyperopt.pyll.base.Apply at 0x7f291f45d660>}
これは hyperopt 0.2.7 で行われました。免責事項として、ハイパーオプトを使用しないことを強くお勧めします。これは、私の経験では、他のオプティマイザーと比較してパフォーマンスが大幅に低下するためです。