2017-04-24 61 views
0

我使用scipy.optimize.minimizehttps://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html)功能与method='L-BFGS-B适合scipy.optimize参数的错误

什么它返回一个例子是在这里上面:

 fun: 32.372210618549758 
hess_inv: <6x6 LbfgsInvHessProduct with dtype=float64> 
    jac: array([ -2.14583906e-04, 4.09272616e-04, -2.55795385e-05, 
     3.76587650e-05, 1.49213975e-04, -8.38440428e-05]) 
    message: 'CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH' 
    nfev: 420 
     nit: 51 
    status: 0 
    success: True 
     x: array([ 0.75739412, -0.0927572 , 0.11986434, 1.19911266, 0.27866406, 
     -0.03825225]) 

x值正确地包含拟合参数。我如何计算与这些参数相关的错误?

回答

1

这真的取决于你所说的“错误”。对于你的问题没有一般的答案,因为它取决于你适合什么,以及你正在做什么假设。

最简单的情况是最常见的情况之一:当您最小化的函数是负对数似然。在这种情况下,由拟合返回的Hessian矩阵是描述对最大似然的高斯逼近的协方差,其是用于估计可能性的最大化中的误差的标准方式。

请注意,如果您适合不同类型的功能或正在做出不同的假设,那么这不适用。

1

这个常见问题的一个方法是在使用minimize与'L-BFGS-B'开始的'L-BFGS-B'找到的解决方案开始使用scipy.optimize.leastsq。也就是说,leastsq将(通常)包括和估计1-sigma错误以及解决方案。

当然,这种方法做了几个假设,包括leastsq都可以使用,可能适合解决这个问题。从实际的角度来看,这要求目标函数返回一个至少与变量一样多的元素的剩余值数组,而不是成本函数。你可能会发现lmfithttps://lmfit.github.io/lmfit-py/)在这里很有用:它支持'L-BFGS-B'和'leastsq',并为这些和其他最小化方法提供统一的包装,以便您可以使用相同的目标函数两种方法(并指定如何将残差数组转换为成本函数)。另外,两个方法都可以使用参数边界。这使得首先使用“L-BFGS-B”的值作为起始值,首先适合'L-BFGS-B',然后再用'leastsq'很容易。

如果您怀疑leastsq使用的简单但快速的方法可能不够充分,Lmfit还提供了更详细地探讨参数值置信限制的方法。