【问题标题】:How to print Gaussian curve fitting results?如何打印高斯曲线拟合结果?
【发布时间】:2020-12-14 13:07:13
【问题描述】:

我花了一些时间,但我使用下面的代码为我的 x,y 数据集创建了一个高斯拟合。

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
def Gauss(x, a, x0, sigma, offset):
    return a * np.exp(-(x - x0)**2 / (2 * sigma**2)) + offset
x, y = np.random.random(100), np.random.random(100)
popt, pcov = curve_fit(Gauss, x, y, p0=[np.max(y), np.median(x), np.std(x), np.min(y)])
plt.plot(x, y, 'b+:', label='data')
x_fit = np.linspace(np.min(x), np.max(x), 1000)
plt.plot(x_fit, Gauss(x_fit, *popt), 'r-', label='fit')
plt.legend()
plt.title('Something')
plt.xlabel('Anotherthing')
plt.ylabel('Athing')
plt.show()

我可以看到我的合身状态很好,并且可以查看图表和所有内容。

我现在想知道的是如何在我的屏幕上打印出这种拟合的结果,例如拟合最大值点 x 处的最大值、估计误差等?

这些信息可以访问吗?如果是这样,有没有办法打印出这些信息?如果没有,有人可以指出我找到合适的错误的正确方向吗?

【问题讨论】:

  • 你能添加你看到的图像吗?甚至更好 - 让它成为一个可重复的例子?
  • @VladimírKunc 我已经添加了这个数字。我调用的数据文件只包含 x 和 y 数字。
  • @VladimírKunc 您只需将第 6 行替换为 x, y = np.random.random(100), np.random.random(100) 即可获得工作示例代码。跨度>

标签: python scipy curve-fitting data-fitting gauss


【解决方案1】:

相关信息包含在您的变量poptpcov 中。见scipy doc。每个变量都会返回一个数组。

【讨论】:

    【解决方案2】:

    看看这里:https://lmfit.github.io/lmfit-py/model.html [参见函数 result.fit_report()]。 您还可以将最终参数添加到绘图标签How to return the fit error in Python curve_fit

    【讨论】:

      【解决方案3】:

      正如 tagoma 所指出的,所有适合您的相关信息都包含在 popt(最佳参数)和 pcov(协方差矩阵)中。在这种情况下,给定您的一组参数(a、x0、sigma、offset),您可以将它们解包为:

      a, x0, sigma, offset = popt;
      

      类似地解开他们的不确定性:

      ua, ux0, usigma, uoffset = np.sqrt(np.diag(pcov));
      

      (因为它们是由它们自己的协方差给出的)。

      据我所知,curve_fit 不提供卡方或标准差等更多信息,我通常在拟合完成后执行所需的计算,只需将所有平方差相加并除以原始值 (但这更多的是统计数据)。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-10-14
        • 2018-12-10
        • 1970-01-01
        • 2012-06-12
        • 2017-11-12
        • 2018-07-23
        • 2022-01-02
        • 1970-01-01
        相关资源
        最近更新 更多