Hyperopt: определить параметр, который зависит от другого параметра - PullRequest
0 голосов
/ 29 октября 2018

Я использую python пакет hyperopt, и у меня есть параметр a, который должен быть больше, чем параметр b.

Например, я надеюсь, что мое пространство параметров будет похоже на

space = {"b": hp.uniform(0, 0.5), "a": hp.uniform(b, 0.5)}

Что требует, чтобы a было как минимум больше b, как я могу это сделать?

Заранее спасибо

1 Ответ

0 голосов
/ 24 февраля 2019

Простой вариант - использовать способность hyperopt для вложения параметров. Таким образом, вы можете определить пространство гиперпараметров, как вы хотите:

space = hp.uniform("a", hp.uniform("b", 0, 0.5), 0.5)

Только значение "a" передается в функцию, которую вы оптимизируете (потому что это пространство гиперпараметров), но hyperopt.fmin() вернет оба параметра.

Аналогичная опция, но в случае, когда оптимизируемая функция получает оба параметра:

b_var = hp.uniform("b", 0, 0.5)
space = {"b": b_var, "a": hp.uniform("a", b_var, 0.5)}

Наконец, может быть проще изменить входные значения для оптимизированной функции: параметр a можно заменить на a_fraction, работающий в диапазоне от 0 до 1 и интерполирующий между b и 0,5 (т. Е. a_fraction = 0 дает a = b и a_fraction = 1 дают a = 0.5 внутри модифицированной функции для оптимизации). Таким образом, пространство параметров имеет обычный вид:

space = {"b": hp.uniform("b", 0, 0.5), "a_fraction": hp.uniform("a_fraction", 0, 1)}

Интересная дискуссия: https://github.com/hyperopt/hyperopt/issues/175#issuecomment-29401501.

...