Я пытаюсь использовать 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]
}