繁体   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