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

2024-06-02 09:08:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了一些时间,但我使用下面的代码为我的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处的最大值、估计误差等

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


Tags: importplotasnppltrandomminsigma
3条回答

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

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

a, x0, sigma, offset = popt;

要解开其不确定性,类似地:

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

(它们由各自的协方差给出)

据我所知,曲线拟合不提供卡方或标准偏差等更多信息,我通常在拟合完成后执行所需的计算,只需将所有的平方偏差相加,然后除以原始值(但这更像是一个统计学问题)

希望有帮助

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

相关问题 更多 >