优化

statsmodels 使用三种类型的算法来估计模型的参数。

  1. 诸如 WLS 和 OLS 等基本线性模型直接使用适当的线性代数进行估计。

  2. RLMGLM 使用迭代重加权最小二乘法。但是,您可以选择下面讨论的 scipy 优化器之一。

  3. 对于所有其他模型,我们使用来自 scipy优化器

在实际情况下,某些模型允许可选地选择 scipy 优化器。特定的 scipy 优化器可能是默认的或可选的。根据模型和数据,选择适当的 scipy 优化器可以避免局部最小值、缩短模型拟合时间或使用更少的内存拟合模型。

statsmodels 支持以下优化器及其与特定优化器相关的关键字参数

  • newton - 牛顿-拉夫森迭代。虽然不是直接来自 scipy,但我们将其视为优化器,因为只需要得分和黑森矩阵。

    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 方法不存储完整的黑森矩阵,而是使用这些项来近似它。)

    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 接口公开(而不是 factr)给 L-BFGS-B。

    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_pcallable f’(x, *args)

    计算 f 的黑森矩阵乘以任意向量 p 的函数。仅在 LikelihoodModel.hessian 为 None 时才应提供。

    avextolfloat

    当最小化器的平均相对误差降至该值以下时停止。

    epsilonfloat 或 ndarray

    如果 fhess 是近似的,则使用此值作为步长。仅在 Likelihoodmodel.hessian 为 None 时相关。

  • powell - Powell 方法。Scipy 的 fmin_powell

    xtolfloat

    线搜索误差容忍度

    ftolfloat

    loglike(params) 的相对误差,可用于收敛。

    maxfunint

    要进行的最大函数评估次数。

    start_direcndarray

    初始方向集。

  • basinhopping - 盆地跳跃。这是 scipy 的 basinhopping 工具的一部分。

    niterinteger

    盆地跳跃迭代的次数。

    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, optional

    要使用的最小化方法的名称。任何特定于方法的参数都可以直接传递。有关方法及其参数的列表,请参阅 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, ...)

使用盆地跳跃算法拟合。


上次更新:2024 年 10 月 3 日