【问题标题】:Gaussian fit in Python - parameters estimationPython中的高斯拟合 - 参数估计
【发布时间】:2015-03-06 17:27:12
【问题描述】:

我想用高斯函数拟合一个数据数组(在名为“data”的程序中,大小为“n”),我想得到曲线参数的估计值,即均值和 sigma .我在网上找到的以下代码是一种快速的方法吗?如果是这样,我怎样才能真正得到参数的估计值?

import pylab as plb
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp

x = ar(range(n))
y = data

n = len(x)                          #the number of data
mean = sum(x*y)/n                   #note this correction
sigma = sum(y*(x-mean)**2)/n        #note this correction

def gaus(x,a,x0,sigma,c):
    return a*exp(-(x-x0)**2/(sigma**2))+c

popt,pcov = curve_fit(gaus,x,y,p0=[1,mean,sigma,0.0])

print popt
print pcov

plt.plot(x,y,'b+:',label='data')
plt.plot(x,gaus(x,*popt),'ro:',label='fit')
plt.legend()
plt.title('Fig. 3 - Fit')
plt.xlabel('q')
plt.ylabel('data')
plt.show()

【问题讨论】:

标签: python parameters curve-fitting gaussian data-fitting


【解决方案1】:

要回答您的第一个问题,“我在网上找到的以下代码是一种快速的方法吗?”

当您认为是高斯并且知道拟合函数时,您拥有的代码实际上是继续拟合数据的正确方法(除了将 return 函数更改为

a*exp(-(x-x0)**2/(sigma**2))

我相信对于高斯函数,您不需要常量 c 参数。

最小二乘最小化的一个常见用途是曲线拟合,其中一个参数化模型函数旨在解释某些现象,并希望调整模型的数值以最接近地匹配某些数据。使用 scipy,此类问题通常使用scipy.optimize.curve_fit 解决。

回答你的第二个问题,“如果是这样,我怎样才能真正得到参数的估计值?”

您可以转到为scipy.optimize.curve_fit 提供的链接,并发现最适合的参数位于您的popt 变量中。在您的示例中,popt 将包含您的数据的meansigma。除了最佳拟合参数,pcov 将包含协方差矩阵,其中将包含您的meansigma 的误差。要获得 1sigma 标准差,您可以简单地使用 np.sqrt(pcov) 并获得相同的结果。

【讨论】:

    猜你喜欢
    • 2021-07-28
    • 1970-01-01
    • 2016-07-21
    • 2015-07-26
    • 1970-01-01
    • 2017-08-30
    • 2017-05-23
    • 2013-10-12
    • 2014-08-27
    相关资源
    最近更新 更多