Как использовать GridSearchCV (python) для максимизации или минимизации функции с параметрами? - PullRequest
2 голосов
/ 31 января 2020

Я хотел бы максимизировать функцию: func(minCount, wordNgrams, lr, epoch, loss) с GridSearch только на этих значениях:

`{'minCount': [2, 3],
'wordNgrams': [1, 2, 3, 4, 5],
'lr': [0.1, 0.01, 0.001, 0.0001],
'epoch': [5, 10, 15, 20, 25, 30],
'loss': [hs, ns, softmax]}`

Я читал о sklearn.model_selection.GridSearchCV(estimator, param_grid, ...) Но, я не знаю, туда, где Я должен поставить my func(minCount, wordNgrams, lr, epoch, loss)

Кстати, я читал о байесовской оптимизации (https://github.com/fmfn/BayesianOptimization), но не понимаю, как использовать это с string и int параметрами

1 Ответ

1 голос
/ 31 января 2020

Согласно документации , у вас есть два решения:

  • Вы можете передать оценщик = веселье c в GridSearchCV, но вы также необходимо пройти функцию подсчета очков . Функция подсчета будет принимать fun c выходных данных и возвращать оценку (с плавающей запятой), которую GridSearchCV будет стремиться оптимизировать. Пример:
def my_scoring_function(func_outputs):

  """
  process the outputs of func and return a score. 

  if func already reutrns the value you want to minimize, 
  my_scoring_function will be the identity function.

  score is the value to optimize
  """

  return score


cv = GridSearchCV(estimator=func, param_grid=my_param_grid, scoring=my_scoring_function)

  • Более сложный, но элегантный: вы можете переписать свой fun c как объект, реализующий методы оценки scikit-learn ( хороший учебник здесь с примером поиска gid) ). Это означает, что в основном будет следовать ряду соглашений, которые приведут к тому, что ваша функция будет вести себя как объекты scikit-learn. Затем GridSearchCV будет знать, как с этим справиться. Это может быть излишним для вашей проблемы, хотя.

Что касается байесовской оптимизации, интересно, если ваша задача соответствует следующим критериям:

  • Оценка вашей функции очень затратна (с точки зрения времени / ресурса ...) и вы не можете Вы можете вызывать его столько раз, сколько требует поиск по сетке. В вашем случае у вас есть 720 комбинаций параметров для изучения, поэтому, если одна оценка стоит 10 с, вам придется запустить поиск по сетке для 7200 с.
  • Вы хотите исследовать более широкое пространство параметров или вы хотите поиск непрерывных пространств для некоторых параметров. Как правило, это может быть интересно для скорости обучения. В этом случае вы также можете использовать случайный поиск, , также реализованный в scikit learn .

Для более подробной информации об байесовской оптимизации я бы порекомендовал эту статью что я считаю очень всеобъемлющим.

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