scipy.optimize.fmin_bfgs: "Gewünschter Fehler nicht unbedingt aufgrund von Präzisionsverlust erreicht"


8

Ich erhalte die Warnung im Betreff des Beitrags, wenn ich versuche, eine Funktion in Python mit der Funktion scipy.optimize.fmin_bfgs zu optimieren . Die komplette Ausgabe:

Warnung: Gewünschter Fehler wird aufgrund von Präzisionsverlust nicht unbedingt erreicht

     Current function value: nan
     Iterations: 1
     Function evaluations: 18
     Gradient evaluations: 3

Es ist kein schwerwiegender Fehler, ich bekomme Antworten, aber sie sind weit von dem Optimum entfernt, das ich suche.

Gibt es typische "Noob" -Fehler, die diesen Fehler verursachen könnten? Ich habe erst gestern angefangen, mit diesem Paket zu arbeiten. Ich bin mir nicht einmal sicher, wo ich anfangen soll. Jede Hilfe wird geschätzt!

Antworten:


9

In solchen Situationen ist es hilfreich, sich den Quellcode anzusehen . Das ist einfach, weil alles in scipyOpen Source ist!

Wie Sie beim Lesen des Quellcodes sehen können, wird die Warnmeldung gedruckt, wenn warnflag==2. Dies wird an anderer Stelle im Code festgelegt, wenn die linesearchFunktion None zurückgibt (dies schlägt fehl).

Warum schlägt die Liniensuche fehl? Das Ziel eines Optimierungsalgorithmus besteht darin, die Minima einer Zielfunktion durch aufeinanderfolgende Iterationen zu finden. In diesem Fall versucht die Zeilensuche, eine Schrittgröße zu finden, bei der die Annäherungen in BFGS noch gültig sind. Wenn sich das Hessische Ihrer Funktion oder sein Gradient in irgendeiner Weise schlecht verhält, kann die Schrittgröße in Klammern als Null berechnet werden, obwohl der Gradient nicht Null ist.

Ich denke, mein Vorschlag ist, entweder in die Literatur zu gehen (Nocedal und Wright haben eine gute Diskussion über die Zeilensuche und die BFGS-Methode) oder zu Ihrer Funktion und sicherzustellen, dass sie sich in der Region, in der Sie suchen, gut benimmt.


Danke, ich hatte den Quellcode bereits ausgecheckt. Leider ist das Problem mein Mangel an theoretischen Kenntnissen über BFGS :-) Ich habe es geschafft, BFGS erfolgreich mit einer nicht vektorisierten Implementierung zu verwenden, daher denke ich, dass sich meine Matrizen nicht wie erwartet verhalten. Dies könnte eine Richtung sein, um das Problem herauszufinden.
ACEG

Wenn Sie die tatsächliche Funktion angeben, die Sie minimieren möchten, und die Region, in der Sie suchen, können wir Ihnen möglicherweise weitere Hinweise zum weiteren Vorgehen geben.
Aron Ahmadia

1
Danke, ich habe das Problem inzwischen gelöst. Der Fehler hatte (wie so oft) absolut nichts mit den problematischen Ergebnissen zu tun. Meine Vermutung war richtig, ich habe Matrizen übergeben, bei denen die Methode transponierte Matrizen erwartete. Jetzt bekomme ich immer noch die erste Warnung, aber es gibt viel mehr Iterationen und ich bekomme gute Werte.
ACEG

Link ist faul ... Link aktualisieren und relevante Bits in die Antwort selbst aufnehmen
innisfree

verrotteter Link behoben.
Aron Ahmadia
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.