【问题标题】:GridSearch API in H2OH2O 中的 GridSearch API
【发布时间】: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


    【解决方案1】:

    如果没记错的话,Grid grid = (Grid) gs.get() 会返回一个完整的网格。现在,什么是最好的模型?如果您说这是最高 ROC,则按降序“auc”对列表进行排序并选择第一个元素 - 就像在 this post 中一样。

    【讨论】:

    • 这正是我的想法。我深入研究了ScoringInfo 代码,发现评分结果确实是排序的,但是,我看不到将ScoringInfos 与Model 或我缺少的关键元素的参数相关联.您的帖子看起来像是 R 中的答案,但我希望在 Java 中找到它。
    • 模型将 ScoringInfo 公开为公共属性:github.com/h2oai/h2o-3/blob/master/h2o-core/src/main/java/hex/…
    • 这是正确的,但我不想使用grid.getModels() 遍历每个模型并将最好的ScoringInfo 与每个模型的得分信息进行比较,这看起来很hacky。 Grid 对象没有公开一个名为 getBestParams 之类的方法,这似乎很奇怪,而这正是我最初寻找的。我用更多信息更新了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 2020-03-15
    • 2018-11-30
    • 2018-03-29
    • 2017-08-23
    • 2012-12-22
    相关资源
    最近更新 更多