0
我正在尝试使用Scala中的GridSearch
API for H2O。我发现this文档说明了在R和Python中要做什么,但是Java文档在实际获得最佳模型之前停止。有人能告诉我最后几行吗? IE给出Grid<MP>
我怎么能得到最好的超参数组合或最好的模型?H2O中的GridSearch API
编辑
这里是我的代码看起来到目前为止(它在斯卡拉但很明显,我打电话到内H2O Java代码)。
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]
}
这正是我的想法。我深入研究了ScoringInfo代码,发现得分结果确实是排序的,但是我没有办法将ScoringInfo与'Model'或params关联起来,这是我缺少的关键元素。您的文章看起来像是R中的答案,但我希望能够在Java中找到它。 – Jon
该模型将ScoringInfo公开为公共属性:https://github.com/h2oai/h2o-3/blob/master/h2o-core/src/main/java/hex/Model.java#L619。 –
这是正确的,但我不希望使用'grid.getModels()'遍历每个模型,并将最好的'ScoringInfo'与每个模型的得分信息进行比较,这看起来很诡异。看起来很奇怪的是,'Grid'对象没有公开一个叫做'getBestParams'的方法,这正是我最初寻找的。我用更多的信息更新了我的问题。 – Jon