优化¶
statsmodels 使用三种类型的算法来估计模型的参数。
在实际情况下,某些模型允许可选地选择 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。
模型类¶
通常,最终用户不需要直接调用这些函数和类。但是,我们提供该类,因为不同的优化技术具有对用户可能很有用的唯一关键字参数。
|
|
|
使用牛顿-拉夫森算法拟合。 |
|
使用 Broyden-Fletcher-Goldfarb-Shannon 算法拟合。 |
|
使用有限内存 Broyden-Fletcher-Goldfarb-Shannon 算法拟合。 |
|
使用 Nelder-Mead 算法拟合。 |
|
使用共轭梯度算法拟合。 |
|
使用牛顿共轭梯度算法拟合。 |
|
使用 Powell 的共轭方向算法拟合。 |
|
使用盆地跳跃算法拟合。 |