第3格 | 用scipy.optimize進行參數擬合

2021-03-02 科研九宮格

我是只寫硬核科研推文的張運霄

歡迎來到科研九宮格


  scipy.optimize  

優化問題可以有以下幾種:

最小化問題 minimize

曲線擬合問題 curve_fit

最小平方擬合問題 least_squares

求根 root

本文只列舉函數,和算法,比較重要的算法有Nelder-Mead 算法和Levenberg-Marquardt算法。具體用法參考連接。

https://docs.scipy.org/doc/scipy/reference/optimize.html

  scipy.optimize.minimize 

fmin: 只有  Nelder-Mead simplex algorithm,已經被minimize取代

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize

Minimization of scalar function of one or more variables.

method:
』Nelder-Mead』
』Powell』
』CG』
』BFGS』
』Newton-CG』
』L-BFGS-B』
』TNC』
』COBYLA』
』SLSQP』
’trust-constr』
』dogleg』
’trust-ncg』
’trust-krylov』
’trust-exact』

  scipy.optimize.least_squares  

leastsq: 只有 Levenberg-Marquardt algorithm,已經被least_squares替代

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.least_squares.html#scipy.optimize.least_squares

Solve a nonlinear least-squares problem with bounds on the variables.

Given the residuals f(x) (an m-D real function of n real variables) and the loss function rho(s) (a scalar function), least_squares finds a local minimum of the cost function F(x):

minimize F(x) = 0.5 * sum(rho(f_i(x)**2), i = 0, ..., m - 1)
subject to lb <= x <= ub

method:

『lm』

『trf』

『dogbox』


trf』 : Trust Region Reflective algorithm, particularly suitable for large sparse problems with bounds. Generally robust method.
dogbox』 : dogleg algorithm with rectangular trust regions, typical use case is small problems with bounds. Not recommended for problems with rank-deficient Jacobian.
lm』 : Levenberg-Marquardt algorithm as implemented in MINPACK. Doesn’t handle bounds and sparse Jacobians. Usually the most efficient method for small unconstrained problems.

  scipy.optimize.curve_fit  


https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html#scipy.optimize.curve_fit

method:

『lm』

『trf』

『dogbox』


Default is 『lm』 for unconstrained problems and 『trf』 if bounds are provided. The method 『lm』 won’t work when the number of observations is less than the number of variables, use 『trf』 or 『dogbox』 in this case.

  scipy.optimize.root_scalar  

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.root_scalar.html#scipy.optimize.root_scalar

method
『bisect』
『brentq』
『brenth』
『ridder』
『toms748』
『newton』
『secant』
『halley』

  scipy.optimize.root  

find a root of a vector function.

method:
『hybr』
『lm』
『broyden1』
『broyden2』
『anderson』
『linearmixing』
『diagbroyden』
『excitingmixing』
『krylov』
『df-sane』


  往期推薦  

看看歷史文章?都挺好的

長按關注科研九宮格,喜歡請點個"在看"~


相關焦點

  • 科學計算庫之Scipy
    Scipy包含的功能有最優化、線性代數、積分、插值、擬合、特殊函數、快速傅立葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算,而這些功能都是我們在之後進行數據分析需要的。下面是一些常用的Scipy的子模塊。
  • 使用 Python 進行響應曲線擬合 —— 一個解決初值難以確定的方案
    本文起源於一個讀者的留言,說為什麼沒有 python 的內容,雖沒有明說,但是有點表明我是扯虎皮拉大旗的意思,這個真是冤枉我了(說這句話我是心虛的),其實有很少量的內容,主要原因我解釋一下:R 是我真正認真學習的第一份程式語言
  • Scipy使用簡介
    import special as Sprint(S.gamma(4))6.0擬合與優化-optimizeoptimize模塊提供了許多數值優化算法,這裡主要對其中的非線性方程組求解、數值擬合和函數最小值進行介紹非線性方程組求解
  • Python數據分析常見庫介紹之Scipy
    Scipy包含的功能有最優化、線性代數、積分、插值、擬合、特殊函數、快速傅立葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算,而這些功能都是我們在之後進行數據分析需要的。下面是一些常用的Scipy的子模塊。
  • 高級的科學計算庫——Scipy
    Scipy包含的功能有最優化、線性代數、積分、插值、擬合、特殊函數、快速傅立葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算,而這些功能都是我們在之後進行數據分析需要的。Scipy依賴於Numpy庫,因此安裝Scipy時應先安裝Numpy庫,Scipy安裝與其他庫一樣,可通過pip install Scipy安裝,也可以自行下載原始碼,然後用pip install 路徑+文件名全稱(包括.後綴文件名)進行安裝,源碼下載連結:https://pypi.python.org/pypi/scipy/1.0.0,選擇對應版本下載即可。
  • 【收藏】萬字解析Scipy的使用技巧!
    import special as Sprint(S.gamma(4))6.0擬合與優化-optimizeoptimize模塊提供了許多數值優化算法,這裡主要對其中的非線性方程組求解、數值擬合和函數最小值進行介紹非線性方程組求解
  • 科學計算庫Scipy簡易入門
    scipy.optimize優化scipy.signal信號處理scipy.sparse稀疏矩陣scipy.spatial空間數據結構和算法scipy.special一些特殊的數學函數scipy.stats統計本篇文章講解科學計算庫Scipy快速入門。
  • 【Python基礎】科學計算庫Scipy簡易入門
    scipy.optimize優化scipy.signal信號處理scipy.sparse稀疏矩陣scipy.spatial空間數據結構和算法scipy.special一些特殊的數學函數scipy.stats統計在此之前,我已經寫了以下幾篇AI基礎的快速入門,本篇文章講解科學計算庫Scipy快速入門:已發布:AI 基礎:Numpy 簡易入門
  • AI 基礎:Scipy(科學計算庫) 簡易入門
    scipy.optimize優化scipy.signal信號處理scipy.sparse稀疏矩陣scipy.spatial空間數據結構和算法scipy.special一些特殊的數學函數scipy.stats統計在此之前,我已經寫了以下幾篇AI基礎的快速入門,本篇文章講解科學計算庫Scipy快速入門:已發布:AI 基礎:Numpy 簡易入門
  • 優化 | 利用SciPy求解非線性規劃問題
    將f傳給optimize.brent,參數brack表示指定算法的開始區間。注意進行優化之前,最好通過目標函數可視化以確定合適的搜索區間或起點。無約束多元優化問題的求解要比一維搜索問題的求解困難得多。多變量情況下,求解非線性梯度方程根的解析方法是不可行的,而黃金分割搜索法中使用的區間形式也不能直接用。
  • [公開課]《Python:從計算到算計》第04講: 科學計算(Scipy)
    scipy.io: 數據輸入輸出scipy.integrate: 積分scipy.interpolate: 插值scipy.linalg: 線性代數scipy.optimize: 優化scipy.cluster: 聚類scipy.constants: 物理和數學常量scipy.fftpack
  • 科學計算庫 SciPy 的前世今生
    因此自然科學領域絕大多數涉及計算的工作都能用它來完成,例如我們熟知的統計學習,擬合個分布、做了 K 最近鄰算法都是非常便捷的。在獲取數據之後,進行各種統計學分析很多都可以用 Scipy 完成,具體而言:研究者根據發病日期構建傳染曲線;使用對數高斯分布擬合暴露歷史和發病日期數據,估計潛伏期分布;使用韋伯分布擬合發病日期、首次就診日期和住院日期,並估計發病離就診的時間間隔分布、發病離住院的時間間隔分布;使用伽瑪分布擬合病例集群數據,從而估計人際傳播的時間間隔(serial interval
  • 如何使用Matlab編程進行參數擬合
    其他的不多說,言歸正傳,下面從原理和實例對如何使用Matlab編程進行參數擬合進行講解。2 基本概念和原理所謂參數擬合,就是已知試驗或者真實數據,然後尋找一個模型對其規律進行模擬,求取模型中未知參數的一個過程。
  • 8 種進行簡單線性回歸的方法分析與討論
    對於大多數數據科學家而言,線性回歸方法是他們進行統計學建模和預測分析任務的起點。但我們不可誇大線性模型(快速且準確地)擬合大型數據集的重要性。如本文所示,在線性回歸模型中,「線性」一詞指的是回歸係數,而不是特徵的 degree。
  • 較小超參數的Bayesian optimisation
    在尋找超參數時我們必須要擬合多個分類器,那我們應該怎麼解決這種問題呢?本文研究了Bayesian optimisation的算法的內部工作,你可以通過使用它來減少設定的超參數集的數量並獲得最優的超參數集。如果你正在尋找一個已經實現的算法工具,Yelp提供了 MOE, metric optimisation 通常高斯過程回歸是一個有效的工具同時被大量使用在這裡。
  • 走過19年,每年千萬下載量,科學計算開源庫SciPy的前世今生
    因此自然科學領域絕大多數涉及計算的工作都能用它來完成,例如我們熟知的統計學習,擬合個分布、做了 K 最近鄰算法都是非常便捷的。當然目前新冠肺炎疫情廣受關注,研究者也可以用它模擬各種關鍵信息。例如之前中國疾病預防控制中心、國內各省市疾控中心等機構在新英格蘭醫學雜誌發表的《新型冠狀病毒肺炎在中國武漢的早期傳播》論文。
  • 線性規劃python手冊03:使用Scipy包解LP
    然後,將模型寫入到Spyder中,from scipy.optimize import linprogobj = [-1, -2]lhs_ineq = [[拓展連結:https://docs.scipy.org/doc/scipy/reference/optimize.linprog-interior-point.htmlhttps://docs.scipy.org
  • 二次多項式擬合曲線 - CSDN
    多項式擬合一次函數運行結果:100運行結果:[4.00355516 1.55927961]# 還可以用 poly1d 生成一個以傳入的 coeff 為參數的多項式函數:多項式擬合正弦函數最小二乘擬合運行結果:
  • 【學習心得087】python學習-科學計算Scipy包功能一覽(上)
    本文僅給出幾個例子給出使用Scipy進行計算的大致思想,重點討論積分,優化,線性代數,統計。想獲取原始碼文件,後臺回復「scipy」。主要內容如下圖所示:科學算法name適用範圍特殊函數(scipy.special)物理學問題積分(scipy.integrate)數值積分問題優化(scipy.optimize)尋找函數極值和零點插值(scipy.interpolate)傅立葉變換(scipy.fftpack)信號處理(scipy.signal)線型代數(scipy.linalg)線性代數問題
  • 如何利用Origin進行曲線擬合?
    Origin 按以下算法把曲線擬合為直線:對X(自變量)和Y(因變量),線性回歸方程為Y=A+BX,參數A(截距)和B(斜率)由最小二乘法求算。實例如下:首先,建立數據表,導入要進行分析的數據,數據中工作表如圖1所示。用擬合分析之間的關係,具體擬合步驟如下: