最佳化¶
statsmodels 使用三種演算法來估計模型的參數。
在可行的情況下,某些模型允許選擇性地選取 scipy 最佳化工具。 特定 scipy 最佳化工具可能是預設值或選項。 根據模型和數據,選擇適當的 scipy 最佳化工具可以避免局部最小值、縮短模型擬合時間,或以較少的記憶體擬合模型。
statsmodels 支援以下最佳化工具,以及與該特定最佳化工具關聯的關鍵字引數
newton
- 牛頓-拉弗森迭代法。 雖然不是直接來自 scipy,但我們將其視為最佳化工具,因為只需要分數和 Hessian。- tolfloat
參數中可接受收斂的相對誤差。
nm
- scipy 的fmin_nm
- xtolfloat
參數中可接受收斂的相對誤差
- ftolfloat
loglike(params) 中可接受收斂的相對誤差
- maxfunint
要執行的最大函數評估次數。
bfgs
- Broyden–Fletcher–Goldfarb–Shanno 最佳化,scipy 的fmin_bfgs
。- gtolfloat
當梯度範數小於 gtol 時停止。
- normfloat
範數的階數 (np.inf 是最大值,-np.inf 是最小值)
- epsilon
如果 fprime 是近似的,請使用此值作為步長。 僅當 LikelihoodModel.score 為 None 時才相關。
lbfgs
-bfgs
的更節省記憶體 (有限記憶體) 實作。 Scipy 的fmin_l_bfgs_b
。- mint
用於定義有限記憶體矩陣的可變度量校正的最大次數。 (有限記憶體 BFGS 方法不會儲存完整的 Hessian,而是使用這麼多項來近似它。)
- pgtolfloat
當
max{|proj g_i | i = 1, ..., n} <= pgtol
時,迭代將停止,其中 pg_i 是投影梯度的第 i 個元件。- factrfloat
當
(f^k - f^{k+1})/max{|f^k|,|f^{k+1}|,1} <= factr * eps
時,迭代停止,其中 eps 是機器精度,由程式碼自動產生。 factr 的典型值為:低精度為 1e12;中等精度為 1e7;極高精度為 10.0。 請參閱註解,以了解與 ftol 的關係,ftol 由 scipy.optimize.minimize 對 L-BFGS-B 的介面公開 (而不是 factr)。- maxfunint
最大迭代次數。
- epsilonfloat
當 approx_grad 為 True 時使用,數值計算梯度的步長
- approx_gradbool
是否以數值方式逼近梯度 (在這種情況下,func 只會傳回函數值)。
cg
- 共軛梯度最佳化。Scipy 的fmin_cg
。- gtolfloat
當梯度範數小於 gtol 時停止。
- normfloat
範數的階數 (np.inf 是最大值,-np.inf 是最小值)
- epsilonfloat
如果 fprime 是近似的,請使用此值作為步長。 可以是純量或向量。 僅當 Likelihoodmodel.score 為 None 時才相關。
ncg
- 牛頓共軛梯度。 Scipy 的fmin_ncg
。- fhess_p可呼叫 f’(x, *args)
計算 f 的 Hessian 乘以任意向量 p 的函數。 僅當 LikelihoodModel.hessian 為 None 時才應提供。
- avextolfloat
當最小化器的平均相對誤差低於此量時停止。
- epsilonfloat 或 ndarray
如果 fhess 是近似的,請使用此值作為步長。 僅當 Likelihoodmodel.hessian 為 None 時才相關。
powell
- Powell 的方法。 Scipy 的fmin_powell
。- xtolfloat
線性搜尋誤差容限
- ftolfloat
loglike(params) 中可接受收斂的相對誤差。
- maxfunint
要執行的最大函數評估次數。
- start_direcndarray
初始方向集。
basinhopping
- Basin hopping。 這是 scipy 的basinhopping
工具的一部分。- niterinteger
basin hopping 迭代的次數。
- niter_successinteger
如果全域最小值候選在這些迭代次數內保持不變,則停止執行。
- Tfloat
用於接受或拒絕條件的「溫度」參數。 「溫度」越高表示會接受函數值中較大的跳躍。 為獲得最佳結果,T 應與局部最小值之間的間隔 (以函數值表示) 相當。
- stepsizefloat
用於隨機位移的初始步長。
- intervalinteger
更新 stepsize 的頻率間隔。
- minimizerdict
要傳遞給最小化器 scipy.optimize.minimize() 的額外關鍵字引數,例如「method」-最小化方法 (例如「L-BFGS-B」) 或「tol」-終止容限。 其他引數是從 fit 的明確引數對應而來:- args <- fargs - jac <- score - hess <- hess
minimize
- 允許使用任何 scipy 最佳化工具。- min_methodstr, 可選
要使用的最小化方法名稱。 可以直接傳遞任何方法特定的引數。 如需方法及其引數的清單,請參閱 scipy.optimize.minimize 的說明文件。 如果未指定任何方法,則會使用 BFGS。
模型類別¶
一般而言,終端使用者不需要直接呼叫這些函數和類別。 不過,我們提供類別,因為不同的最佳化技術具有可能對使用者有用的唯一關鍵字引數。
|
|
|
使用牛頓-拉弗森演算法進行擬合。 |
|
使用 Broyden-Fletcher-Goldfarb-Shannon 演算法進行擬合。 |
|
使用有限記憶體 Broyden-Fletcher-Goldfarb-Shannon 演算法進行擬合。 |
|
使用 Nelder-Mead 演算法進行擬合。 |
|
使用共軛梯度演算法進行擬合。 |
|
使用牛頓共軛梯度演算法進行擬合。 |
|
使用 Powell 的共軛方向演算法進行擬合。 |
|
使用 Basin-hopping 演算法進行擬合。 |