Python参数估计中的高斯拟合



我想用高斯函数拟合一组数据(在名为"data"的程序中,大小为"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()

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

事实上,当你相信是高斯的并且知道拟合函数(除了将return函数更改为

CCD_ 2。

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

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

要回答您的第二个问题,"如果是,我如何实际获得参数的估计值?"

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

最新更新