我使用'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}
然而我总是得到一个结果
消息:'收敛:F的相对减少量〈=系数 *EPSMCH'
有人知道为什么吗?我试着把ftol设置为负值,但是这给出了一个错误。
2条答案
按热度按时间9gm1akwq1#
优化算法通过对参数值进行微小的改变并测量改变的速率来工作。(想象山上的雪橇,因为你要处理的是浮点数,所以你可以不断地对数值做越来越小的改变。为了防止程序运行,你需要一些完成的标准。(当你在山脚下时,你把雪橇指向哪个方向并不重要)
ftol
设置函数调用中更改的最小容差,gtol
设置全局容差。当您将其设置为0时,您将告诉例程计算默认容差。当您将其设置为负数时,您将要求例程在abs(f(x)-f(x+delta)) <= ftol
时停止,这在负数情况下不会发生。尝试运行ftol:1 e-6和gtol:1 e-6。看看收敛到一个解需要多长时间/多少次迭代。然后尝试运行1 e-7,看看需要多长时间。然后注意得到的最小值变化很小。
选项的典型值为options={'disp':无,“最大值”:20、“iprint”:-1,“gtol”:1e-05,“eps”:1 e-08,“最大值”:15000,“英尺公差”:2.220446049250313e-09,“美高”:10、“迈凯轮”:15,000个)
请访问https://docs.scipy.org/doc/scipy/reference/optimize.minimize-lbfgsb.html#optimize-minimize-lbfgsb
pcww981p2#
虽然没有记录,但我相信“正常”终止消息:
F〈=系数 *EPSMCH的相对减少量
意味着函数值没有显著变化。这通常由两个原因引起:
函数值和梯度不匹配。例如,梯度计算错误。
不连续性存在于最小化的范围内。如果是这种情况,切换到另一种方法可能会有帮助。