2015-08-28 268 views
2

什麼是Matlab函數lsqcurvefit(),它使數據和參數化函數(曲線)之間的平方誤差最小化的等價函數或最接近的python函數,稱爲SciPy函數?Python的等價函數lsqcurvefit()函數

我知道scipy.optimize.curve_fit和scipy.optimize.leastsq很接近。但是,他們不使用信賴域感知最小二乘法。當然,我可以自己編寫算法之間切換的條件。但是,如果有現有的Python代碼,我不必重新發明輪子。

+0

您的最終目標是什麼?也許這可能會有所幫助:http://mail.scipy.org/pipermail/scipy-user/2013-November/035192.html? – askewchan

+2

看看https://github.com/nmayorov/bounded-lsq/blob/master/bounded_lsq/trf.py。其記錄在https://nmayorov.wordpress.com/2015/06/19/trust-region-reflective-algorithm/。 –

+0

+1 @ @ TrisNefzger的建議。這應該在未來版本的scipy中可用。目前它的https://github.com/scipy/scipy/pull/5044 –

回答

2

trf.py作者:Nikolay Mayorov實施最小二乘優化的信賴域反射算法,Matlab的lsqcurvefit()default

兩者都基於托馬斯F.科爾曼和育英利的工作:

  1. 「內部,用於非線性最小化符合界限,信賴域法」 SIAM雜誌上的優化,卷。 6,pp。418-445,1996,available in PDF here

  2. 「關於大範圍非線性最小化反射牛頓法收斂的界限」,數學規劃,Vol。 67,第2號,第189-224頁,1994年,可在PDF here中查到。

有可能是在用Matlab與Mayorov實現實際的算法一定的差異在後者的blog表示。

+0

非常感謝,Tris Nefzger!這正是我正在尋找的。似乎該代碼僅使用內部信任區域反射算法,而沒有在上述算​​法和Matlab函數lsqcurvefit()中使用的算法Levenberg-Marquardt方法之間切換。當然,與實施內部信任區域反射算法相比,這是一個小問題。我們可以寫一個小代碼來切換自己。你會同意嗎? – Hans

+0

@Hans:我想這是可能的,並且會盡快提供單獨的函數,這些函數可以導入額外的共享或複雜功能模塊,例如從trust_region導入trf.py。其中一部分原因是,收集某些函數的參數和選項對我來說太複雜了,我寧願一個給定的函數專注於在較窄範圍內只做一件事。無論如何,我沒有開發這個功能,如果您對SciPy有任何建議,請在http://www.scipy.org/scipylib/mailing-lists.html上訂閱它的郵件列表。 –

+1

兩個小小的更正:1)這個更新的版本是(現在)在尼古拉的公關我鏈接的評論。您鏈接的版本不是最後一個。 2)用戶的主要入口點應該是'least_squares'; trf.py是一個實現細節。 –