非線性性能你好,
我有一個經常使用非線性平台的客戶。
他定義了一個包含 16 個參數的方程,並希望在相對大的數據(106300 行)上估計它們。 估計可能需要大約 3 個小時,這是相當長的時間。
他有一台 4 核計算機,但在此過程中只使用了一個。
除了 RAM,有沒有人有任何建議來改善他的案件的時間問題?在這種情況下,添加 RAM 真的會有很好的影響嗎?
默認情況下,他使用的是牛頓法。 我不確定更改此選項是否有用。
非常感謝您的建議,
佛羅倫薩
PS:祝大家節日快樂!
回复:非線性性能我同意尼克的方法,尤其是起點和使用的算法。 使用牛頓時,起點非常重要。 即使這樣,您也可能只是根據後面的方法想出一個本地解決方案。 如果您具有具有多個轉折點的高度非線性行為,那麼牛頓也有困難,那麼它可能會從一個最佳值跳到另一個最佳值並且很難收斂。 BFGS 或 Quasi Neeton 應該表現更好。 而且它們更有可能產生真正的最佳結果。 他應該試試這兩個建議,以防他無法提前減少參數集。 我也同意這是一個很大的參數集。 雖然在數值優化中並不少見。 但是,您必須記住,對於牛頓,您需要在每次迭代中計算 16x16 hessian 及其倒數,這非常耗時。 同樣對於牛頓,我不認為它是多線程的,因為每一步都需要計算上一步的導數。但是在hessian的計算中它可以是多線程的。我也不確定在 JMP 中是否實現了與 1 不同的步長,這對於具有許多極端的高度非線性函數可能更好。 BFGS 和例如 levenberg markwardt 正在使用基於先前迭代的梯度信息的 hessian 的近似值,。 因此你需要更少的操作。回复:非線性性能嗨,佛羅倫薩!
一個有 16 個參數的模型聽起來很多……他們運行 16 個參數有什麼原因(物理模型等)嗎? 另外,他們使用的是什麼版本的 JMP、操作系統、內存大小等?
非線性是超線程的(參見“使用 JMP”第 602 頁),因此它應該在所有 4 個內核上運行。 如果您在他安裝時沒有看到其他內核有任何負載,那麼他可能設置了一些不允許超線程的東西。 我會首先追求它,因為它會在 JMP 上全面提升性能。
最好的,
米
回复:非線性性能我總是與使用非線性平台的客戶分享以下策略,通常這些將有助於快速收斂到解決方案:
- 使用迭代選項的各種組合(Newton、QuasiNewton BFGS、QuasiNewton SR1 和僅限數值導數)
- 使用滑塊調整參數的起始值以直觀地修改曲線以更好地適應
- 通過變換方程使多項式居中,這將改善優化條件
- 增加允許的迭代次數
- 放寬收斂標準之一
- 嘗試不同的模型,如果數據沒有表現出與所選模型相同的關係,將很難收斂到一個解決方案。
- 減少參數的數量,過度定義的模型是指參數多於對關係建模所需的參數。
回复:非線性性能你好佛羅倫薩,
這聽起來可能有點落後,但我建議您的客戶嘗試對更小的數據子集進行參數估計,然後將估計值與更大的數據集進行比較,看看它們與使用完整數據集的差距有多大。他們能否用 10% 或 20% 的數據得到一組合理的估計值? 一旦他們有了一組他們信任的參數,他們就可以將公式應用於其餘的數據集。
最好的,
賬單