我正在使用'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} 不管怎么说我总能得到一个结果
信息:“会聚:REL_REDUCTION_OF_F_<=_FACTR*EPSMCH”
有人知道为什么吗?我试图设置ftol为负,但这会产生一个错误。
发布于 2017-08-10 15:17:53
这是故意的。优化算法的工作原理是对参数值进行小幅度的变化,并测量变化率。(想到山上的雪橇,你想找到最陡峭的斜坡)。因为您正在处理浮点数,所以您可以不断地对值进行越来越小的更改。为了防止程序运行,您需要一些标准来确定您完成程序的时间。(当你在山脚下时,你指向雪橇的方向并不重要)
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,‘maxls’:15000})
请参阅https://docs.scipy.org/doc/scipy/reference/optimize.minimize-lbfgsb.html#optimize-minimize-lbfgsb
发布于 2022-10-16 23:46:12
虽然没有证件,但我相信“正常”的终止信息:
REL_REDUCTION_OF_F_<=_FACTR*EPSMCH
意味着功能值缺乏显著变化。造成这种情况的原因通常有两个:
函数值和梯度不匹配。例如,错误的梯度计算。
这种不连续性存在于极小化范围内。如果是这样的话,切换到另一种方法可能会有帮助。
https://stackoverflow.com/questions/45616929
复制相似问题