高斯拟合Python - 参数估计

时间:2015-03-04 05:07:37

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

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

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()

1 个答案:

答案 0 :(得分: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)并获得相同的标准差。