Python Pythin lmfit库:如何使用最小值来限制函数调用的数量
如何使用Minimizer对象来最小化函数调用的数量。我从日志中得到以下消息: 函数调用太多(最大值设置为%i)!使用:最小化(func,params,…,maxfev=NNN)或设置leastsq_kws[\'maxfev\']以增加此最大值Python Pythin lmfit库:如何使用最小值来限制函数调用的数量,python,scipy,lmfit,Python,Scipy,Lmfit,如何使用Minimizer对象来最小化函数调用的数量。我从日志中得到以下消息: 函数调用太多(最大值设置为%i)!使用:最小化(func,params,…,maxfev=NNN)或设置leastsq_kws[\'maxfev\']以增加此最大值 from numpy import sqrt, pi, exp, loadtxt from lmfit import Model from lmfit import Minimizer import matplotlib.pyplot as plt
from numpy import sqrt, pi, exp, loadtxt
from lmfit import Model
from lmfit import Minimizer
import matplotlib.pyplot as plt
data = loadtxt('data/model1d_gauss.dat')
x = data[:, 0]
y = data[:, 1]
def gaussian(x, amp, cen, wid):
"1-d gaussian: gaussian(x, amp, cen, wid)"
return (amp/(sqrt(2*pi)*wid)) * exp(-(x-cen)**2 /(2*wid**2))
gmodel = Model(gaussian)
result = gmodel.fit(y, x=x, amp=5, cen=1, wid=1,method= 'least_squares')
print(result.fit_report())
r = result.fit_report()
plt.plot(x, y, 'bo')
plt.plot(x, result.init_fit, 'k--')
plt.plot(x, result.best_fit, 'r-')
plt.show()
我想通过最小化函数调用来加快拟合速度(很多数据都是垃圾)我不确定我是否建议这样做,但由于您在内部使用scipy,您可以传递所需的选项,例如:
result = gmodel.fit(y, x=x, amp=5, cen=1, wid=1,method='least_squares',
fit_kws={'max_nfev': 100})
当然,这是假设lmfit在观察到maxiter达到的状态后将接受该状态。但从你的问题看来,这只是一个警告
请记住,这个优化器是基于公差标准(参见文档)的,当不收敛于给定的x
步数时,它实际上认为它仍然可以改进最小化
如评论中所述:是的,您也可以更改这些标准,例如:
result = gmodel.fit(y, x=x, amp=5, cen=1, wid=1,method='least_squares',
fit_kws={'ftol': 1-07, # default 1e-08
'xtol': 1-07, # 1e-08
'gtol': 1-07}) # 1e-08
您是否也可以拟合数据,直到出现可接受的错误?如果是这样的话,代码片段是什么?@im281您可以使用任何参数,并记录在案。我添加了一些示例。