Python/Scipy - 将 optimize.curve_fit 的 sigma 应用于 optimize.leastsq

5
我正在使用逻辑模型来拟合数据点。由于有时候会出现ydata误差的情况,因此我首先使用了curve_fit和其sigma参数将我的个体标准差包含在拟合中。
现在我转而使用leastsq,因为我需要一些好的拟合估计,而curve_fit无法提供。一切都很顺利,但现在我错过了像"sigma"那样对最小二乘进行加权的可能性。
是否有人能够提供一些代码示例,以便我可以在leastsq中对最小二乘进行加权?
谢谢,Woodpicker
3个回答

6

我刚刚发现可以将两者的优点结合起来,使用full_output选项,从curve_fit()函数中获得完整的leastsq()输出:

popt, pcov, infodict, errmsg, ier = curve_fit(func, xdata, ydata, sigma = SD, full_output = True)

这给了我一个信息字典,可以用来计算所有的适合度指标,并且让我同时使用curve_fit的sigma选项...


你如何为一个3D曲面拟合模型实现相同的功能? - diffracteD

5
假设您的数据存储在数组 xyyerr 中,而模型是 f(p, x),只需定义误差函数为 (y-f(p,x))/yerr 即可将其最小化。

0

scipy.optimize.curve_fit文档中写道:

pcov:2d数组

popt的估计协方差矩阵。对角线提供参数估计值的方差。要计算参数的一个标准差错误,请使用perr = np.sqrt(np.diag(pcov))。sigma参数如何影响估计协方差取决于absolute_sigma参数,如上所述。

关于

absolute_sigma:bool,可选

如果为True,则sigma在绝对意义上使用,并且估计的参数协方差pcov反映了这些绝对值。

如果为False,则仅相对大小的sigma值有意义。返回的参数协方差矩阵pcov基于通过将sigma缩放一个常数因子来实现。该常数是通过要求使用缩放后的sigma时最优参数popt的降低的卡方为单位来设置的。换句话说,在拟合后,sigma被缩放以匹配残差样本方差。从数学上讲,pcov(absolute_sigma = False)= pcov(absolute_sigma = True)* chisq(popt)/(M-N)

所以,您可以将absolute_sigma保留为默认值(False),然后使用

 perr = np.sqrt(np.diag(pcov))
 fitStdErr0 = perr[0]
 fitStdErr1 = perr[1]
 ...

要获取每个拟合参数的标准偏差误差(作为1D numpy数组)。现在您可以选择有用的成员(并以最能代表您数据的方式组合它们)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接