2

fehlgeschlagen Während einer logistischen Regressions Klassifizierer trainiert ich die folgende Fehlermeldung erhalten:Spark2 - Logistische Regression Ausbildung beendet, aber das Ergebnis ist nicht konvergiert, weil: line Suche

2016-08-16 20:50:23,833 ERROR [main] optimize.LBFGS (Logger.scala:error(27)) - Failure! Resetting history: breeze.optimize.FirstOrderException: Line search zoom failed 
2016-08-16 20:50:24,009 INFO [main] optimize.StrongWolfeLineSearch (Logger.scala:info(11)) - Line search t: 0.9 fval: 0.4515497761131565 rhs: 0.45154977611314895 cdd: 3.4166889881493167E-16 

Dann wird das Programm fortgesetzt für eine Weile, aber dann ist dieses Ich begegne Fehler:

2016-08-16 20:50:24,365 ERROR [main] optimize.LBFGS (Logger.scala:error(27)) - Failure again! Giving up and returning. Maybe the objective is just poorly behaved? 
2016-08-16 20:50:24,367 WARN [main] classification.LogisticRegression (Logging.scala:logWarning(66)) - LogisticRegression training finished but the result is not converged because: line search failed! 
2016-08-16 20:50:27,143 INFO [main] optimize.StrongWolfeLineSearch (Logger.scala:info(11)) - Line search t: 0.4496001808762097 fval: 0.5641490068577 rhs: 0.6931115872739131 cdd: 0.01924752705390458 
2016-08-16 20:50:27,143 INFO [main] optimize.LBFGS (Logger.scala:info(11)) - Step Size: 0.4496 
2016-08-16 20:50:27,144 INFO [main] optimize.LBFGS (Logger.scala:info(11)) - Val and Grad Norm: 0.564149 (rel: 0.186) 0.622296 
2016-08-16 20:50:27,181 INFO [main] optimize.LBFGS (Logger.scala:info(11)) - Step Size: 1.000 
2016-08-16 20:50:27,181 INFO [main] optimize.LBFGS (Logger.scala:info(11)) - Val and Grad Norm: 0.484949 (rel: 0.140) 0.285684 
2016-08-16 20:50:27,226 INFO [main] optimize.LBFGS (Logger.scala:info(11)) - Step Size: 1.000 
2016-08-16 20:50:27,226 INFO [main] optimize.LBFGS (Logger.scala:info(11)) - Val and Grad Norm: 0.458425 (rel: 0.0547) 0.0789000 
2016-08-16 20:50:27,263 INFO [main] optimize.LBFGS (Logger.scala:info(11)) - Step Size: 1.000 

Aber dann geht das Training weiter.

Obwohl es aussieht, als ob das Training erfolgreich abgeschlossen wurde (ich bekomme ein Modell, ich mache Vorhersagen auf dem Testset, validiere Klassifikator, etc.), mache ich mir Sorgen um diesen Fehler. Irgendwelche Ideen was bedeutet der Fehler? Irgendwelche Empfehlungen, wie man es überwinden kann? (Ich benutze 10, 000 als maximale Anzahl von Iterationen)

Antwort

2

Das Problem war mit LBFGS-Optimierer, der von der logistischen Regression Algorithmus verwendet wird.

Dieser Fehler tritt am wahrscheinlichsten auf, wenn der Gradient falsch oder die Konvergenztoleranz zu eng eingestellt ist.

In meinem Fall, ich hatte den Algorithmus wie folgt:

new LogisticRegression(). 
     setFitIntercept(true). 
     setRegParam(0.3). 
     setMaxIter(100000). 
     setTol(0.0). 
     setStandardization(true). 
     setWeightCol("classWeightCol").setLabelCol("label").setFeaturesCol("features") 

Wo die Konvergenztoleranz von Iterationen auf 0 (setTol(0.0)) Die Spark-Dokumentation Zustand gesetzt wurde:

"Smaller value will lead to higher accuracy with the cost of more iterations. Default is 1E-6. " 

Aber sobald der Setzer auf setTol(0.1) geändert wird, tritt der Zeilensuchfehler nicht mehr auf.

Zusätzliche Möglichkeit, wenn Modell nicht konvergieren ist, ist erhöhen Sie die Anzahl der Iterationen.

Verwandte Themen