限制fmin_bfgs中猜测的变化幅度

时间:2014-04-11 22:51:15

标签: python scipy mathematical-optimization

我尝试使用Scipy.Optimize中的fmin_BFGS函数和数值计算的Hessian在python中使用MLE估计统计模型。

目前它给了我以下警告:Desired error not necessarily achieved due to precision loss

当我打印每个评估的结果时,我看到虽然起始猜测产生了合理的对数似然。然而,经过一些猜测后,成本函数从~230,000跃升至9.5e + 179。

然后,当尝试在例程的linesearch部分中计算RuntimeWarning: overflow encountered in double_scalars时,它会发出运行时警告:radical = B * B - 3 * A * C

我怀疑算法试图在接近溢出的点处估计成本函数。有没有办法降低算法更改参数值的速率,以使函数保持在行为良好的区域? (我会使用受约束的BFGS例程,但我不会对参数值有什么好的先验)

1 个答案:

答案 0 :(得分:3)

我最近遇到了与fmin_bfgs相同的问题。

据我所知,答案是否定的。我没有看到限制步长的方法。

我的解决方法是首先运行Nelder-Mead fmin进行一些迭代,然后切换到fmin_bfgs。一旦我足够接近最佳状态,我的函数曲率就会好得多,fmin_bfgs就不再有问题了。

在我的情况下,问题是我的功能的梯度在远离最佳值的点处非常大。

fmin_l_bfgs_b也可以不受限制地工作,并且有几个用户报告了可靠的性能。

除此之外:如果您能够将案例转换为相对简单的测试用例,那么您可以将其发布到scipy问题跟踪器,以便开发人员或贡献者可以查看它。