最佳化

statsmodels 使用三種演算法來估計模型的參數。

  1. 基本的線性模型,例如 WLS 和 OLS,會直接使用適當的線性代數進行估計。

  2. RLMGLM,使用迭代重新加權最小平方法。 但是,您可以選擇性地選取以下討論的 scipy 最佳化工具之一。

  3. 對於所有其他模型,我們使用來自 scipy最佳化工具

在可行的情況下,某些模型允許選擇性地選取 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。

模型類別

一般而言,終端使用者不需要直接呼叫這些函數和類別。 不過,我們提供類別,因為不同的最佳化技術具有可能對使用者有用的唯一關鍵字引數。

最佳化工具()

_fit_newton(f, score, start_params, fargs, ...)

使用牛頓-拉弗森演算法進行擬合。

_fit_bfgs(f, score, start_params, fargs, kwargs)

使用 Broyden-Fletcher-Goldfarb-Shannon 演算法進行擬合。

_fit_lbfgs(f, score, start_params, fargs, kwargs)

使用有限記憶體 Broyden-Fletcher-Goldfarb-Shannon 演算法進行擬合。

_fit_nm(f, score, start_params, fargs, kwargs)

使用 Nelder-Mead 演算法進行擬合。

_fit_cg(f, score, start_params, fargs, kwargs)

使用共軛梯度演算法進行擬合。

_fit_ncg(f, score, start_params, fargs, kwargs)

使用牛頓共軛梯度演算法進行擬合。

_fit_powell(f, score, start_params, fargs, ...)

使用 Powell 的共軛方向演算法進行擬合。

_fit_basinhopping(f, score, start_params, ...)

使用 Basin-hopping 演算法進行擬合。


上次更新:2024 年 10 月 03 日