簡體   English   中英

python 中的高斯擬合失敗

[英]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.

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