使用非“ Leastsq”方法获取由lmfit获得的协方差最佳拟合参数

时间:2018-08-09 14:42:12

标签: optimization minimize minimization lmfit

我有一些观测数据,我想使用lmfit.Minimizer()来拟合一些模型参数,以最小化误差函数,由于我不会在这里讨论的原因,该函数必须返回浮点数而不是残差数组。这意味着我不能使用Leastsq方法来最小化该功能。实际上,方法nelderBFGSpowell可以很好地收敛,但是这些方法不能提供最佳拟合参数(MinimizerResult.covar)的协方差。

我想知道当使用任何非Leastsq方法时,您是否是计算此协方差的简单方法。

1 个答案:

答案 0 :(得分:0)

确实,leastsq方法是唯一可以计算误差线的方法,并且这需要残留的 array (元素多于变量!)。

事实证明,在lmfit中已经完成了一些工作,以期能够为标量最小化器计算不确定性,但是它并不完整。请参见https://github.com/lmfit/lmfit-py/issues/169https://github.com/lmfit/lmfit-py/pull/481。如果您有兴趣提供帮助,那就太好了!

但是,是的,您可以手动计算协方差。对于每个变量,您都需要对其值进行微扰(理想情况下约为1-sigma,但是由于这是您要计算的内容,您可能不知道),然后修正该值并优化所有值其他值。这样,您可以计算Jacobian矩阵(相对于变量的残差数组的导数)。

根据雅可比矩阵,协方差矩阵为(假设没有奇点):

covar = numpy.inv(numpy.dot(numpy.transpose(jacobian), jacobian))