[英]Gaussian fit failure in python
我一直在嘗試將高斯曲線擬合到我的數據中
我使用了以下代碼:
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
def gaus(x, y0, a, b, c):
return y0 + a*np.exp(-np.power(x - b, 2)/(2*np.power(c, 2)))
popt, pcov = curve_fit(gaus, x, y)
plt.figure()
plt.scatter(x, y, c='grey', marker = 'o', label = "Measured values", s = 2)
plt.plot(x, gaus(x, *popt), c='grey', linestyle = '-')
這就是我得到的:結果
我這里有 x/y 數據,以防您想自己嘗試。
關於我如何健身的任何想法? 該數據顯然是高斯形的,所以我無法擬合高斯曲線似乎很奇怪。
合身需要一個體面的起點。 根據文檔,如果您沒有指定起點,所有參數都設置為 1,這顯然是不合適的,並且擬合會陷入一些錯誤的局部最小值。 試試這個,我通過觀察數據選擇了起點
popt, pcov = curve_fit(gaus, x, y, p0 = (1500,2000,20, 1))
求解器找到的解是
popt
array([1559.13138798, 2128.64718985, 21.50092272, 0.16298357])
即使只是得到大致正確的平均值(參數b
)也足以讓求解器找到解決方案,例如試試這個
popt, pcov = curve_fit(gaus, x, y, p0 = (1,1,20, 1))
你應該看到相同的(好)結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.