Adattamento non lineare - Come verificare il successo?Panoramica:
Come posso verificare se un adattamento non lineare è riuscito?
(I dati reali non sempre convergono e potrebbero richiedere una revisione manuale per problemi di automazione/test/prodotto.)
Dettaglio:
Vorrei scrivere una risposta dopo che un adattamento non lineare non riesce a convergere.Se l'adattamento fallisce, devo elaborare in un altro modo e/o eventualmente etichettare per la revisione manuale. (Sto campionando una popolazione, quindi per ogni parte, eseguendo un adattamento non lineare.Generalmente se fallisco la convergenza, c'era un problema di test da qualche parte; In realtà non voglio allentare i criteri di convergenza.)
(messaggio "fallito": "fallito: impossibile ridurre la funzione obiettivo")

Script modificato solo da derivati numerici (Guida > Indice script > "<
(Attualmente in esecuzione 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?
Ideale.
Se esiste una variabile di stato bool restituita dalla piattaforma di adattamento non lineare da qualche parte che indica il successo o il fallimento, credo che sarebbe il metodo ideale per verificare il successo.
alternativa 1.
Posso anche tabulare o fare un riepilogo dei dati per vedere se tutti i : Nome ( "Formula Previsione Fantasia" ) i valori sono zero.(I valori sembrano essere 0 se l'adattamento fallisce).
Alternativa 2.
Probabilmente c'è un modo per controllare l'XML e leggere il messaggio "fallito".
Grazie per il vostro tempo e considerazione.
-Aubrey
ScriptingRi: Adattamento non lineare - Come verificare il successo?Ecco un approccio che utilizza l'alternativa 2a (raschiando le parole dal rapporto). Le prime 2 righe svolgono il lavoro effettivo e la terza riga è solo un semplice esempio di cosa fare con le informazioni; probabilmente hai qualcos'altro in mente per questa parte.
// 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 ..."));Ri: Adattamento non lineare - Come verificare il successo?Questo lo farà.Grazie Jed!
Ri: Adattamento non lineare - Come verificare il successo?Mi chiedo se un controllo migliore sia se il testo è qualcosa di diverso dal successo:
If( Not( Contains( alltext, "Converged" ) ),
// trap failure
,
// proceed after success
);
Ri: Adattamento non lineare - Come verificare il successo?Sei più vicino a dove mi sto dirigendo.
ho lavorato con:
if (contains(alltext, "Failed"), caption ("Failed: Do additional action now ..."));Come cattura tutto, ma sto considerando di aggiungere più di un'istruzione case (o immagino più "se"), per gestire in modo specifico il motivo dell'errore.</CODE></P><P><CODE class=" language-jsl">
ad esempio, posso eseguire di nuovo con un numero di iterazioni più elevato se rilevo questo motivo di errore:
contains(alltext, "Maximum Iteration Exceeded");
La vera motivazione è che "la maggior parte" delle parti convergerà con un approccio numerico, ma alcune sembrano richiedere analisi.Non sono sicuro di cosa stia succedendo per causare questo.Criteri di convergenza?Ma la "correzione" è eseguire di nuovo senza derivate numeriche, qualcosa del tipo:
nonlinear = dt << Nonlinear(
Y( :Name( "Random" ) ),
X( :Name("FancyPredictionFormula") ),
Expand Intermediate Formulas( 1 ),
Newton,
Finish,
Plot( 0 ),
Confidence Limits,
Save Estimates
);Dopo aver catturato con:
contains(alltext, "Cannot Decrease Objective Function");
Ri: Adattamento non lineare - Come verificare il successo?Il solito colpevole dietro la mancata convergenza sono i valori dei parametri iniziali. Spesso è sufficiente utilizzare l'euristica specifica del dominio per inizializzarli quando disponibili.