非線性擬合 - 如何檢查是否成功?概述:
如何檢查非線性擬合是否成功?
(真實數據並不總是收斂,可能需要手動審查自動化/測試/產品問題。)
細節:
我想在非線性擬合無法收斂後編寫響應腳本。如果擬合失敗,我需要採用另一種方式進行處理,和/或最終貼上標籤以供人工審核。 (我正在對總體進行採樣,然後對每個部分進行非線性擬合。一般來說,如果我收斂失敗,則說明某處存在測試問題;我實際上不想放鬆收斂標準。)
(“失敗”消息:“失敗:無法減少目標函數”)

僅限數值導數的修改腳本(幫助 > 腳本索引 >“<<非線性”)
(當前運行 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?
理想的。
我認為,如果非線性擬合平台在某處返回一個 bool 狀態變量指示成功或失敗,那麼這將是驗證成功的理想方法。
替代方案 1。
我還可以對數據進行製表或匯總,看看是否所有的:姓名( 《花式預測公式》 )值為零。(如果擬合失敗,值似乎為 0)。
替代方案 2。
可能有一種方法可以檢查 XML 並讀取“失敗”消息。
感謝您的時間和考慮。
-奧布里
自動化和腳本編寫回复:非線性擬合 - 如何檢查是否成功?未能收斂的常見罪魁禍首是起始參數值。 當可用時,使用特定於域的啟發式方法來初始化它們通常就足夠了。
回复:非線性擬合 - 如何檢查是否成功?你離我要去的地方更近了。
我一直在與:
if (contains(alltext, "Failed"), caption ("Failed: Do additional action now ..."));總的來說,但我正在考慮添加更多的 case 語句(或者我猜是多個“if”),以專門處理失敗原因。</CODE></P><P><CODE class=" language-jsl">
例如,如果我發現這個失敗原因,我可以以更高的迭代次數再次運行:
contains(alltext, "Maximum Iteration Exceeded");
真正的動機是,“大多數”部分將通過數值方法進行收斂,但有些部分似乎需要分析。我不確定發生了什麼導致這種情況。收斂標準?但“修復”是在沒有數值導數的情況下再次運行,例如:
nonlinear = dt << Nonlinear(
Y( :Name( "Random" ) ),
X( :Name("FancyPredictionFormula") ),
Expand Intermediate Formulas( 1 ),
Newton,
Finish,
Plot( 0 ),
Confidence Limits,
Save Estimates
);捕穫後:
contains(alltext, "Cannot Decrease Objective Function");
回复:非線性擬合 - 如何檢查是否成功?我想知道是否更好的檢查是文本是否除了成功之外還有其他內容:
If( Not( Contains( alltext, "Converged" ) ),
// trap failure
,
// proceed after success
);
回复:非線性擬合 - 如何檢查是否成功?這樣就可以了。謝謝杰德!
回复:非線性擬合 - 如何檢查是否成功?這是使用替代方案 2a 的方法(從報告中刪除文字)。 前兩行執行實際工作,第三行只是一個如何處理信息的簡單示例;對於這一部分,您可能還有其他想法。
// 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 ..."));