Hyperopt список значений для каждого гиперпараметра - PullRequest
2 голосов
/ 04 августа 2020

Я пытаюсь использовать 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. Если нет, приветствуются любые предложения по оптимизатору, где это возможно.

Ответы [ 2 ]

0 голосов
/ 15 августа 2020

Как отмечено в моем комментарии, я не на 100% уверен, что вы ищете, но вот пример использования hyperopt для оптимизации комбинации трех переменных:

import random

# define an objective function
def objective(args):
    v1 = args['v1']
    v2 = args['v2']
    v3 = args['v3']
    result = random.uniform(v2,v3)/v1
    return result

# define a search space
from hyperopt import hp

space = {
    'v1': hp.uniform('v1', 0.5,1.5),
    'v2': hp.uniform('v2', 0.5,1.5),
    'v3': hp.uniform('v3', 0.5,1.5),
}

# minimize the objective over the space
from hyperopt import fmin, tpe, space_eval
best = fmin(objective, space, algo=tpe.suggest, max_evals=100)

print(best)

все они имеют одинаковый поиск пробел в данном случае (насколько я понимаю, это было ваше определение проблемы). Hyperopt стремится минимизировать целевую функцию, поэтому при ее запуске v2 и v3 будут близки к минимальному значению, а v1 - к максимальному значению. Так как это в большинстве случаев минимизирует результат целевой функции.

0 голосов
/ 08 августа 2020

Привет, я реализовал это решение с помощью optuna. Преимущество optuna в том, что он создает гиперпространство для всех отдельных значений, но оптимизирует эти значения более интеллектуальным способом и использует только одну оптимизацию гиперпараметров. Например, я оптимизировал нейронную сеть с помощью параметров Batch-SIze, Learning-rate и Dropout-Rate: enter image description here

The search space is much larger than the actual values being used. This safes a lot of time instead of an grid search.

The Pseudo-Code of the implementation is:

def function(trial): #trials is the parameter of optuna, which selects the next hyperparameter
    distribution = [0 , 1]
    a = trials.uniform("a": distribution) #this is a uniform distribution
    b = trials.uniform("a": distribution)

    return (a*b)-b
    #This above is the function which optuna tries to optimze/minimze

For more detailed source-Code visit Optuna . Это сэкономило мне много времени, и это был действительно хороший результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...