2017-04-24 25 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還提供了更詳細地探討參數值置信限制的方法。