【问题标题】:Python / Scipy - implementing optimize.curve_fit 's sigma into optimize.leastsqPython / Scipy - 将 optimize.curve_fit 的 sigma 实现到 optimize.leastsq
【发布时间】:2013-05-06 18:56:06
【问题描述】:

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

现在我切换到了 leastsq,因为我还需要一些曲线拟合无法提供的拟合优度估计。一切都很好,但现在我错过了像“sigma”对curve_fit一样加权最小平方的可能性。

有人有一些代码示例说明如何在最小平方中加权最小二乘吗?

谢谢你,伐木工

【问题讨论】:

    标签: python scipy curve-fitting least-squares


    【解决方案1】:

    scipy.optimize.curve_fit docs 说:

    pcov:二维数组

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

    以及关于

    的部分

    absolute_sigma : bool,可选

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

    如果为 False,则只有 sigma 值的相对大小很重要。返回的参数协方差矩阵 pcov 基于按常数因子缩放 sigma。这个常数是通过要求当使用缩放的 sigma 时优化参数 popt 的减少 chisq 等于统一来设置的。换句话说,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 的方式组合它们)。

    【讨论】:

      【解决方案2】:

      我刚刚发现可以结合两全其美,并使用选项 full_output 也可以从 curve_fit() 获得完整的 leastsq() 输出:

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

      这给了我 infodict,我可以用它来计算我所有的拟合优度,并让我同时使用 curve_fit 的 sigma 选项...

      【讨论】:

      • 如何为 3D 曲面拟合模型做同样的事情?
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-24
        • 2013-03-07
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 2021-11-05
        • 1970-01-01
        • 2011-12-15
        相关资源
        最近更新 更多