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

时间:2013-05-12 17:36:40

标签: python scipy curve-fitting least-squares

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

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

是否还有一些代码示例,说明我如何在最小平方中加权最小二乘?

谢谢,Woodpicker

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:4)

假设您的数据位于数组xy yerr且模型为f(p, x),请将错误函数定义为{{1} }。

答案 2 :(得分:0)

scipy.optimize.curve_fit docs说:

  

pcov:二维数组

     

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

还有

部分
  

absolute_sigma:布尔型,可选

     

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

     

如果为False,则仅sigma值的相对大小重要。返回的参数协方差矩阵pcov基于缩放sigma常数。通过使用缩放的sigma时,要求最优参数popt的减小的chisq等于1来设置此常数。换句话说,对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]
 ...

获取每个拟合参数的标准偏差误差(作为一维numpy数组)。现在,您可以选择有用的成员(并以most representative of your data的方式组合它们)。