2016-10-24 2 views
0

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] 
} 

답변

1

작동합니까, 그리드 그리드 = (그리드) gs.get() 완전한 격자를 돌려줍니다. 자, 가장 좋은 모델은 무엇입니까? 가장 높은 ROC라고 말하면 "auc"를 내림차순으로 정렬하고 첫 번째 요소를 선택하십시오 - this post과 매우 비슷합니다.

+0

이것은 정확히 내가 생각한 것입니다. 필자는'ScoringInfo' 코드를 깊이 파고 스코어링 결과가 실제로 정렬되어 있음을 발견했습니다. 그러나'ScoringInfo's를'Model' 또는 필자가 누락 된 핵심 요소 인 params와 상관시키는 방법이 없습니다 . 귀하의 게시물은 R의 답변 인 것처럼 보이지만 자바로 찾으려고했습니다. – Jon

+0

모델은 ScoringInfo를 공개 속성 (https://github.com/h2oai/h2o-3/blob/master/h2o-core/src/main/java/hex/Model.java#L619)으로 나타냅니다. –

+0

이것은 맞지만'grid.getModels()'를 사용하여 각 모델을 탐색하고 최고의 'ScoringInfo'를 각 모델의 득점 정보 (hacky)와 비교할 필요가 없습니다. 'Grid' 객체가 처음에 찾고 있던 getBestParams와 같은 메소드를 공개하지 않는 것이 이상하게 보입니다. 좀 더 많은 정보로 내 질문을 업데이트했습니다. – Jon