首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lmfit -最小化器不接受scipy最小化关键字参数。

lmfit -最小化器不接受scipy最小化关键字参数。
EN

Stack Overflow用户
提问于 2019-11-06 10:13:47
回答 2查看 624关注 0票数 0

我正试图用lmfit将一些模型与我的数据相匹配。见下文的“妇女权利公约”:

代码语言:javascript
复制
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')

为了更早的完成(目前来说,准确性不是最重要的事情),我想改变停止配合的标准。基于文档所以上的一些搜索,我尝试提供一些关键字参数(下面一行中的fit_kws),这些参数将传递给使用的最小化器。我还尝试使用kws**{'xatol':0.01}。接下来,我还在最后一行中尝试了前面提到的选项,其中我调用了fitter.minimize()。但是,在所有情况下,我都会得到一个TypeError,它会得到意想不到的关键字参数:

代码语言:javascript
复制
---------------------------------------------------------------------------
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'

有人知道我如何为特定的求解者添加关键字参数吗?

版本信息:

python: 3.6.9

枕木: 1.3.1

lmfit: 0.9.12

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-09 13:09:53

将关键字参数传递给底层scipy解决程序的最佳方法是使用

代码语言:javascript
复制
# Note: valid but will not do what you want
fitter = lmfit.Minimizer(lm_min, params, fcn_args=(x, ydata), xatol=0.01)
fit = fitter.minimize(method='nelder')

代码语言:javascript
复制
# Also: valid but will not do what you want
fitter = lmfit.Minimizer(lm_min, params, fcn_args=(x, ydata))
fit = fitter.minimize(method='nelder', xatol=0.01)

这里的主要问题是xatol不是底层解决器scipy.optimize.minimize()的有效关键字参数。相反,您可能打算使用tol

代码语言:javascript
复制
fitter = lmfit.Minimizer(lm_min, params, fcn_args=(x, ydata), tol=0.01)
fit = fitter.minimize(method='nelder')

代码语言:javascript
复制
fitter = lmfit.Minimizer(lm_min, params, fcn_args=(x, ydata))
fit = fitter.minimize(method='nelder', tol=0.01)
票数 0
EN

Stack Overflow用户

发布于 2019-11-12 10:45:22

在github 问题中,我找到了以下解决方案:

代码语言:javascript
复制
fit = fitter.minimize(method='nelder', **{'options':{'xatol':4e-4}})

更新

正如@dashesy所提到的,这与写作是一样的:

代码语言:javascript
复制
fit = fitter.minimize(method='nelder', options={'xatol':4e-4})

这也适用于其他解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58727732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档