如何打印高斯曲线拟合结果?

时间:2020-08-25 19:12:48

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

我花了一些时间,但是我使用下面的代码为自己的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()

我可以看到我的身体做得很好,可以看到图表和所有内容。

Image

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

这些信息可以访问吗?如果是这样,是否有办法打印出此信息?如果不是,请问有人可以指出正确的方向吗?

3 个答案:

答案 0 :(得分:3)

相关信息包含在变量poptpcov中。参见scipy doc。您将为每个变量返回一个数组。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

a, x0, sigma, offset = popt;

同样地,要解开他们的不确定性:

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

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

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

希望对您有所帮助。