簡體   English   中英

Python中的高斯擬合-參數估計

[英]Gaussian fit in Python - parameters estimation

我想用高斯函數擬合一組數據(在名為“ 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()

要回答您的第一個問題, “下面的代碼是我在網上找到的快速方法嗎?”

當您認為數據是高斯的並且知道擬合函數時,實際上擁有的代碼是正確擬合數據的正確方法(將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)並獲得相同的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM