【发布时间】:2017-03-06 18:25:55
【问题描述】:
我正在尝试将 Scala 中的GridSearch api 用于H2O。我找到了this 文档,它显示了在 R 和 Python 中要做什么,但 Java 文档在实际获得最佳模型之前就停止了。谁能告诉我最后几行? IE 给出了Grid<MP> 我怎样才能获得最佳的超参数组合或最佳模型?
编辑
这是我的代码到目前为止的样子(它在 Scala 中,但显然我在 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]
}
关键问题是我不知道最后两行怎么写。
所以经过一番挖掘,我想出了这个我不喜欢但确实有效的解决方案
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]
}
【问题讨论】:
标签: java scala machine-learning h2o hyperparameters