H2O에 대해 스칼라 내에 GridSearch
api를 사용하려고합니다. 나는 this 문서를 찾았는데 R과 파이썬에서 무엇을해야하는지 보여 주지만 자바 문서는 실제로 가장 좋은 모델을 얻기 전에 멈춘다. 누군가가 지난 몇 줄을 말해 줄 수 있습니까? IE는 Grid<MP>
을 어떻게 받습니까? 최고의 하이퍼 파라메타 조합 또는 최상의 모델을 얻으려면 어떻게해야합니까?H2O의 GridSearch API
편집 여기
내 코드는 지금까지 (이 스칼라에있어하지만 분명히 내가 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]
}
중요한 문제는 마지막 두 줄을 쓰는 방법을 모르겠다는 것입니다. 메모리를 제공하는 경우
그래서 내가 좋아하지 않는이 솔루션을 마련하지만, 한 뒷조사 후 어떤이
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's를'Model' 또는 필자가 누락 된 핵심 요소 인 params와 상관시키는 방법이 없습니다 . 귀하의 게시물은 R의 답변 인 것처럼 보이지만 자바로 찾으려고했습니다. – Jon
모델은 ScoringInfo를 공개 속성 (https://github.com/h2oai/h2o-3/blob/master/h2o-core/src/main/java/hex/Model.java#L619)으로 나타냅니다. –
이것은 맞지만'grid.getModels()'를 사용하여 각 모델을 탐색하고 최고의 'ScoringInfo'를 각 모델의 득점 정보 (hacky)와 비교할 필요가 없습니다. 'Grid' 객체가 처음에 찾고 있던 getBestParams와 같은 메소드를 공개하지 않는 것이 이상하게 보입니다. 좀 더 많은 정보로 내 질문을 업데이트했습니다. – Jon