scipy优化最小化始终以REL_REDUCTION_OF_F_退出

时间:2017-08-10 14:46:36

标签: python scipy

我正在使用'L-BFGS-B'最小化一些对数可能性,我不希望算法在REL_REDUCTION_OF_F_ <= factr*epsmch时停止,因此我设置了ftol=0

min_log = scipy.optimize.minimize(fun=minus_log_lik, x0=proc_param,
                                  method='L-BFGS-B', bounds=tuple(bounds),
                                  options={'ftol':0,'gtol':1e-06} 

但是我总是用

得到一个结果
  

消息:'CONVERGENCE:REL_REDUCTION_OF_F_&lt; = _ FACTR * EPSMCH'

有谁知道为什么?我试图设置ftol为负,但这会产生错误。

1 个答案:

答案 0 :(得分:2)

这是设计的。优化算法通过对参数值进行微小变化并测量变化率来工作。 (想想山上的雪橇,你想要找到最陡的斜坡)。因为您正在处理浮点数,所以您可以继续对值进行越来越小的更改。为了防止程序运行,您需要一些标准来完成。 (当你在山脚下时,你指向雪橇的方向并不重要)

ftol设置函数调用中更改的最小容差,gtol设置全局容差。当您将其设置为0时,您将告诉例程计算默认容差。当您将其设置为负数时,您要求例程在何时停止 abs(f(x)-f(x+delta)) <= ftol这不能以负数发生。

尝试使用ftol:1e-6和gtol:1e-6运行。并了解收敛解决方案需要多长时间/多少次迭代。然后尝试1e-7,看看需要多长时间。然后注意获得的最小值变化不大。

选项的典型值是options = {'disp':None,'maxls':20,'iprint': - 1,'gtol':1e-05,'eps':1e-08,'maxiter' :15000,'ftol':2.220446049250313e-09,'maxcor':10,'maxfun':15000})

请参阅https://docs.scipy.org/doc/scipy/reference/optimize.minimize-lbfgsb.html#optimize-minimize-lbfgsb