我正在尝试使用 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:初始状态的条件数很大。确保你的步行者是线性独立的以获得最佳性能”
从我搜索的内容来看,跳过此错误的解决方案似乎是在 emcce示例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。有人会这么好心地提出解决方案吗?不幸的是,我不能使用最小二乘拟合,因为它往往会经常卡在局部最小值上。