2016-08-24 10 views
1

私はMLlibでグリッド検索の素朴な実装をしたいと思いますが、私はちょっと「最良の」パラメータ範囲を選ぶことについて混乱しています。明らかに、私は、おそらく改良されたモデルを与えないパラメータの組み合わせのためにあまりにも多くのリソースを無駄にしたくありません。あなたの経験からどんな提案ですか?グリッド検索のパラメータの最適範囲は?

設定パラメータ範囲:

val intercept : List[Boolean] = List(false) 
val classes  : List[Int]  = List(2) 
val validate : List[Boolean] = List(true) 
val tolerance : List[Double] = List(0.0000001 , 0.000001 , 0.00001 , 0.0001 , 0.001 , 0.01 , 0.1 , 1.0) 
val gradient : List[Gradient] = List(new LogisticGradient() , new LeastSquaresGradient() , new HingeGradient()) 
val corrections : List[Int]  = List(5 , 10 , 15) 
val iters  : List[Int]  = List(1 , 10 , 100 , 1000 , 10000) 
val regparam : List[Double] = List(0.0 , 0.0001 , 0.001 , 0.01 , 0.1 , 1.0 , 10.0 , 100.0) 
val updater  : List[Updater] = List(new SimpleUpdater() , new L1Updater() , new SquaredL2Updater()) 

は、グリッドサーチを実行します。

val combinations = for (a <- intercept; 
         b <- classes; 
         c <- validate; 
         d <- tolerance; 
         e <- gradient; 
         f <- corrections; 
         g <- iters; 
         h <- regparam; 
         i <- updater) yield (a,b,c,d,e,f,g,h,i) 

for((interceptS , classesS , validateS , toleranceS , gradientS , correctionsS , itersS , regParamS , updaterS) <- combinations.take(3)) { 

     val lr : LogisticRegressionWithLBFGS = new LogisticRegressionWithLBFGS(). 
      setIntercept(addIntercept=interceptS). 
      setNumClasses(numClasses=classesS). 
      setValidateData(validateData=validateS) 

     lr. 
      optimizer. 
      setConvergenceTol(tolerance=toleranceS). 
      setGradient(gradient=gradientS). 
      setNumCorrections(corrections=correctionsS). 
      setNumIterations(iters=itersS). 
      setRegParam(regParam=regParamS). 
      setUpdater(updater=updaterS) 

} 

答えて

0

関与hyperparamsのための大きさの順序のための範囲でrandomizedsearchcvを使用してランダム化されたグリッド検索してみてください。

+0

あなたはこの質問に一番最初に答えているようです(1.5年後)...私にとってそれは答えとして投稿してください。担当者の不足にかかわらず。通常のコメントのために。この回答は通常、コード行に関係しないので、コメントとして実行する必要があります。心に留めておきます。お楽しみください;-) – ZF007