GridSearch API в H2O

Я пытаюсь использовать GridSearch api в Scala для H2O. Я нашел это > документация, в которой показано, что делать в R и Python, но документация по Java останавливается до того, как действительно будет получена лучшая модель. Кто-нибудь может сказать мне последние несколько строк? IE получил Grid<MP>, как я могу получить лучшие комбинации гиперпараметров или лучшую модель?

РЕДАКТИРОВАТЬ

Вот как выглядит мой код до сих пор (он на Scala, но, очевидно, я вызываю код Java в H2O).

private[this] def hyperopt(hyperParams: Map[String, Array[Object]]): M = {
  val search = GridSearch.startGridSearch(
    null,
    params,
    hyperParams.asJava,
    new SimpleParametersBuilderFactory[P],
    new HyperSpaceSearchCriteria.RandomDiscreteValueSearchCriteria)
  val grid = search.get().asInstanceOf[Grid[P]]
  val scoringInfo = grid.getScoringInfos.last // This is best scoringInfo cause it gets sorted along the way
  //val bestParams = scoringInfo.???
  //grid.getModel(bestParams).asInstanceOf[M]
}

Ключевая проблема в том, что я не умею писать последние 2 строки.

Итак, покопавшись, я пришел к решению, которое мне не нравится, но которое действительно работает.

private[this] def hyperopt(hyperParams: (Map[String, Array[Object]], String)): M = {
  val search = GridSearch.startGridSearch(
    null,
    params,
    hyperParams._1.asJava,
    new SimpleParametersBuilderFactory[P],
    new HyperSpaceSearchCriteria.RandomDiscreteValueSearchCriteria)
  val grid = search.get()
  val summary = grid.createSummaryTable(grid.getModelKeys, hyperParams._2, true)

  info("Hyper parameter results")
  info(summary.toString)

  // TODO Fix this hack.  I don't know a better way to do this now.
  val bestModelId = summary.get(0, 1)
  grid.getModels.find(m => m._key.toString == bestModelId).get.asInstanceOf[M]
}

person Jon    schedule 24.10.2016    source источник


Ответы (1)


Если память не изменяет, Grid grid = (Grid) gs.get () возвращает вам полную сетку. Итак, что представляет собой лучшую модель? Если вы говорите, что это самый высокий ROC, то отсортируйте список по убыванию «auc» и выберите первый элемент - так же, как в этот пост.

person Lukasz Tracewski    schedule 24.10.2016
comment
Я так и думал. Я глубоко погрузился в код ScoringInfo и обнаружил, что результаты оценки действительно отсортированы, однако я не вижу способа соотнести ScoringInfos ни с Model, ни с параметрами, которые являются ключевым элементом, который мне не хватает. Ваш пост выглядит так, как будто это ответ на R, но я надеялся найти его на Java. - person Jon; 25.10.2016
comment
Модель предоставляет ScoringInfo как общедоступное свойство: github.com/h2oai/h2o-3/blob/master/h2o-core/src/main/java/hex/. - person Lukasz Tracewski; 25.10.2016
comment
Это правильно, но я не хочу, чтобы мне приходилось проходить через каждую модель, используя grid.getModels(), и сравнивать лучшие ScoringInfo с информацией оценки каждой модели, что кажется хакерским. Просто кажется странным, что объект Grid не предоставляет метод, называемый чем-то вроде getBestParams, который я искал изначально. Я обновил свой вопрос, добавив дополнительную информацию. - person Jon; 26.10.2016