【发布时间】:2019-11-06 10:13:47
【问题描述】:
我正在尝试使用lmfit 为我的数据拟合一些模型。请参阅下面的 MWE:
import lmfit
import numpy as np
def lm(params, x):
slope = params['slope']
interc = params['interc']
return interc + slope * x
def lm_min(params, x, data):
y = lm(params, x)
return data - y
x = np.linspace(0,100,1000)
y = lm({'slope':1, 'interc':0.5}, x)
ydata = y + np.random.randn(1000)
params = lmfit.Parameters()
params.add('slope', 2)
params.add('interc', 1)
fitter = lmfit.Minimizer(lm_min, params, fcn_args=(x, ydata), fit_kws={'xatol':0.01})
fit = fitter.minimize(method='nelder')
为了早点完成(目前准确度不是最重要的),我想更改停止拟合的标准。根据docs 和对SO 的一些搜索,我尝试提供一些关键字参数(下一行中的fit_kws),这些参数将传递给所使用的最小化程序。我还尝试使用kws 和**{'xatol':0.01}。除此之外,我还在最后一行中尝试了前面提到的选项,我称之为fitter.minimize()。但是,在所有情况下,我都会收到 TypeError,说它有意外的关键字参数:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~/STACK/WUR/PhD/Experiments/Microclimate experiment/Scripts/Fluctuations/mwe.py in <module>()
25
26 fitter = lmfit.Minimizer(lm_min, params, fcn_args=(x, ydata), fit_kws={'xatol':0.01})
---> 27 fit = fitter.minimize(method='nelder')
28
~/anaconda3/envs/py/lib/python3.6/site-packages/lmfit/minimizer.py in minimize(self, method, params, **kws)
1924 val.lower().startswith(user_method)):
1925 kwargs['method'] = val
-> 1926 return function(**kwargs)
1927
1928
~/anaconda3/envs/py/lib/python3.6/site-packages/lmfit/minimizer.py in scalar_minimize(self, method, params, **kws)
906 else:
907 try:
--> 908 ret = scipy_minimize(self.penalty, variables, **fmin_kws)
909 except AbortFitException:
910 pass
TypeError: minimize() got an unexpected keyword argument 'fit_kws'
有人知道如何为特定求解器添加关键字参数吗?
版本信息:
蟒蛇:3.6.9
scipy:1.3.1
lmfit:0.9.12
【问题讨论】:
-
只是通过字典,没有
'fit_kws'等关键字 -
正如我所说,我已经尝试使用 **{'xatol':0.01} 传递字典
-
对不起,我不是说字典。只需传递
xatol = 0.01而不传递**它将作为字典接收{'xatol':0.01} -
也已经尝试过了,给出了相同类型的错误,但随后出现了 xatol。
-
您使用的是哪个版本的
lmfit?