Python / Scipy - 将optimize.curve_fit的sigma实现到optimize.leastsq中

问题描述 投票:6回答:3

我使用逻辑模型拟合数据点。由于我有时会有ydata错误的数据,我首先使用curve_fit及其sigma参数来包含我在拟合中的各个标准偏差。

现在我切换到了最小化,因为我还需要一些曲率拟合无法提供的拟合优度估计。一切都运作良好,但现在我错过了权衡最小平方的可能性,因为“sigma”与curve_fit有关。

有人一些代码示例关于我如何在最小方格中加权最小二乘?

谢谢,啄木鸟

python scipy curve-fitting least-squares
3个回答
5
投票

我刚刚发现可以结合两个世界的最佳组合,并使用选项full_output从curve_fit()获得完整的leastsq()输出:

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

这给了我infodict,我可以用来计算我所有的Fitness of Fit,并让我同时使用curve_fit的sigma选项......


4
投票

假设你的数据在数组xyyerr,模型是f(p, x),只需将误差函数定义为(y-f(p,x))/yerr最小化。


0
投票

scipy.optimize.curve_fit docs说:

pcov:2d数组

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

和节

absolute_sigma:bool,可选

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

如果为假,则只有西格玛值的相对大小很重要。返回的参数协方差矩阵pcov基于通过常数因子缩放西格玛。通过要求在使用缩放的西格玛等于1时弹出最佳参数的减少的chisq来设置该常数。换句话说,缩放西格玛以匹配拟合后残差的样本方差。数学上,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数组)。现在你可以选择有用的成员(并以most representative of your data的方式组合它们)。

© www.soinside.com 2019 - 2024. All rights reserved.