优化

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

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

  2. RLMGLM,使用迭代重加权最小二乘法。然而,您可以选择性地选择下面讨论的其中一个 scipy 优化器。

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

在实际应用中,某些模型允许选择可选的scipy优化器。特定的scipy优化器可能是默认的或是一个选项。根据模型和数据的不同,选择合适的scipy优化器可以避免局部最小值,减少模型拟合时间,或减少内存使用。

statsmodels 支持以下优化器及其相关关键字参数:

  • newton - 牛顿-拉弗森迭代法。虽然不是直接来自scipy,但我们认为它是一个优化器,因为它只需要分数和海森矩阵。

    tolfloat

    参数收敛可接受的相对误差。

  • nm - scipy的fmin_nm

    xtolfloat

    参数收敛可接受的相对误差

    ftolfloat

    对数似然(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 接口(而不是 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 的 Hessian 矩阵与任意向量 p 的乘积的函数。仅当 LikelihoodModel.hessian 为 None 时才应提供。

    avextolfloat

    当最小化器中的平均相对误差低于此值时停止。

    epsilonfloat or ndarray

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

  • powell - 鲍威尔方法。Scipy的fmin_powell

    xtolfloat

    线搜索误差容限

    ftolfloat

    对数似然函数(params)的相对误差,可接受以达到收敛。

    maxfunint

    最大函数评估次数。

    start_direcndarray

    初始方向设置。

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

    niterinteger

    盆地跳跃迭代的次数。

    niter_successinteger

    如果全局最小候选者在这么多迭代中保持不变,则停止运行。

    Tfloat

    用于接受或拒绝标准的“温度”参数。较高的“温度”意味着将接受函数值的较大跳跃。为了获得最佳结果,T 应与局部最小值之间的分离(在函数值上)相当。

    stepsizefloat

    用于随机位移的初始步长。

    intervalinteger

    更新步长的时间间隔。

    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。

模型类

通常情况下,终端用户不需要直接调用这些函数和类。然而,我们提供这个类是因为不同的优化技术有独特的关键字参数,这些参数可能对用户有用。

Optimizer()

_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, ...)

使用鲍威尔共轭方向算法进行拟合。

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

使用盆地跳跃算法进行拟合。


Last update: Oct 16, 2024