【发布时间】:2021-06-17 11:01:39
【问题描述】:
我正在尝试使用 lmfit 和 emcee minner 将函数拟合到两个数据集
我的代码如下所示:
minner = lmfit.Minimizer(function_2min, params, fcn_args=([x1,x2], [y1,y2],[y_err1,y_err2]))
result = minner.minimize(method='emcee')
这适用于某些数据集,但有时我会收到如下所示的错误:
“ValueError:初始状态的条件数很大。确保你的 walkers 是线性独立的以获得最佳性能”
从我的谷歌搜索看来,跳过此错误的解决方案似乎是在 emcce sample 中将 skip_initial_state_check 参数设置为 True
我试图通过这种方式将此设置传递给最小化器来做到这一点:
result = minner.minimize(method='emcee',**{'skip_initial_state_check':True})
但是我得到一个错误:
"TypeError: emcee() 得到了一个意外的关键字参数 'skip_initial_state_check'"
但是,当我尝试通过将任何其他参数传递给司仪来做到这一点时,它似乎可以工作。例如,这很好用:
result = minner.minimize(method='emcee',**{'nwalkers':5000})
所以我的结论是,我没有将参数传递给 emcee 样本,而是一般地传递给 emcee。有人会这么好心地提出解决方案吗?不幸的是,我不能使用最小二乘拟合,因为它往往会经常卡在局部最小值上。
【问题讨论】:
标签: python python-3.x lmfit emcee