Nichtlineare Anpassung – Wie überprüfe ich den Erfolg?Überblick:
Wie kann ich überprüfen, ob eine nichtlineare Anpassung erfolgreich war?
(Echte Daten stimmen nicht immer überein und erfordern möglicherweise eine manuelle Überprüfung auf Automatisierungs-/Test-/Produktprobleme.)
Detail:
Ich möchte ein Skript für eine Antwort erstellen, nachdem eine nichtlineare Anpassung nicht konvergiert.Wenn die Anpassung fehlschlägt, muss ich die Verarbeitung auf andere Weise durchführen und/oder sie eventuell zur manuellen Überprüfung kennzeichnen. (Ich bemustere eine Grundgesamtheit und führe dann für jeden Teil eine nichtlineare Anpassung durch.Wenn die Konvergenz fehlschlägt, liegt im Allgemeinen irgendwo ein Testproblem vor. Eigentlich möchte ich die Konvergenzkriterien nicht lockern.)
(„Fehlgeschlagen“-Meldung: „Fehlgeschlagen: Zielfunktion kann nicht verringert werden“)

Geändertes Skript von Nur numerische Ableitungen (Hilfe > Skriptindex > „<
(Derzeit läuft JMP 15.2.1)
Names Default To Here( 1 );
dt = Open(
"$SAMPLE_DATA/Nonlinear Examples/US Population.jmp"
);
// Random, intentionally divergent, formula on this dataset
dt << New Column( "Random", Numeric, Formula( Random LogLogistic(5) ) );
dt << New Column( "FancyPredictionFormula",
Numeric,
Continuous,
Formula(
Parameter(
{Rth0 = 735, n = 0.5},
(:year / :pop) * ((1 - ((n - 1) * :pop * Rth0) / (:year
* (300 / :year) ^ n)) ^ (-1 / (n - 1)) - 1)
)
)
);
nonlinear = dt << Nonlinear(
Y( :Name( "Random" ) ),
X( :Name("FancyPredictionFormula") ),
Expand Intermediate Formulas( 1 ),
Numeric Derivatives Only( 1 ),
QuasiNewton SR1,
Interation Limit(50),
Finish,
Plot( 0 ),
Confidence Limits,
Save Estimates
);
// How to check if nonlinear fit succeeded?
Ideal.
Wenn irgendwo eine Bool-Statusvariable von der Nonlinear-Fit-Plattform zurückgegeben wird, die Erfolg oder Misserfolg anzeigt, wäre das meiner Meinung nach die ideale Methode, um den Erfolg zu überprüfen.
Alternative 1.
Ich kann die Daten auch tabellarisch darstellen oder eine Zusammenfassung erstellen, um zu sehen, ob alle : Name ( „FancyPredictionFormula“ ) Werte sind Null.(Werte scheinen 0 zu sein, wenn die Anpassung fehlschlägt).
Alternative 2.
Es gibt wahrscheinlich eine Möglichkeit, das XML zu überprüfen und die Meldung „fehlgeschlagen“ zu lesen.
Vielen Dank für Ihre Zeit und Rücksicht.
-Aubrey
Automatisierung und SkripterstellungBetreff: Nichtlineare Anpassung – Wie überprüfe ich den Erfolg?Der übliche Grund für das Scheitern der Konvergenz sind die Startparameterwerte. Oft reicht es aus, domänenspezifische Heuristiken zu verwenden, um sie zu initialisieren, sofern verfügbar.
Betreff: Nichtlineare Anpassung – Wie überprüfe ich den Erfolg?Du bist näher dran, wohin ich damit gehe.
Ich habe gearbeitet mit:
if (contains(alltext, "Failed"), caption ("Failed: Do additional action now ..."));Als Haken für alles, aber ich denke darüber nach, eher eine Case-Anweisung (oder ich vermute mehrere „Wenns“) hinzuzufügen, um speziell den Fehlergrund zu behandeln.</CODE></P><P><CODE class=" language-jsl">
Beispielsweise kann ich mit einer höheren Iterationszahl erneut ausführen, wenn ich diesen Fehlergrund erkenne:
contains(alltext, "Maximum Iteration Exceeded");
Die eigentliche Motivation besteht darin, dass „die meisten“ Teile mit einem numerischen Ansatz konvergieren, einige jedoch offenbar eine Analyse erfordern.Ich bin mir nicht sicher, was die Ursache dafür ist.Konvergenzkriterien?Die „Lösung“ besteht jedoch darin, erneut ohne numerische Ableitungen zu arbeiten, etwa so:
nonlinear = dt << Nonlinear(
Y( :Name( "Random" ) ),
X( :Name("FancyPredictionFormula") ),
Expand Intermediate Formulas( 1 ),
Newton,
Finish,
Plot( 0 ),
Confidence Limits,
Save Estimates
);Nach dem Fang mit:
contains(alltext, "Cannot Decrease Objective Function");
Betreff: Nichtlineare Anpassung – Wie überprüfe ich den Erfolg?Ich frage mich, ob eine bessere Überprüfung darin besteht, ob der Text alles andere als erfolgreich ist:
If( Not( Contains( alltext, "Converged" ) ),
// trap failure
,
// proceed after success
);
Betreff: Nichtlineare Anpassung – Wie überprüfe ich den Erfolg?Das reicht.Danke Jed!
Betreff: Nichtlineare Anpassung – Wie überprüfe ich den Erfolg?Hier ist ein Ansatz unter Verwendung von Alternative 2a (Ausschneiden der Wörter aus dem Bericht). Die ersten beiden Zeilen erledigen die eigentliche Arbeit und die dritte Zeile ist nur ein einfaches Beispiel dafür, was mit den Informationen geschehen soll; Wahrscheinlich haben Sie für diesen Teil etwas anderes im Sinn.
// How to check if nonlinear fit succeeded?
r = nonlinear << report;
alltext = r[Outline Box("Control Panel")] << get text;
if (contains(alltext, "Cannot Decrease"), caption ("Failed: Cannot Decrease ..."));