python - Python 中的非对称高斯拟合

标签 python curve-fitting gaussian

我正在尝试将非对称高斯拟合到此数据:http://ge.tt/99iNaL53 (csv 文件)。

我曾尝试使用 lmfit 中的倾斜高斯模型和样条曲线,但我无法使高斯模型很好地拟合并且样条曲线不是我想要的(我不想要希望样条曲线完全符合如下所示的数据,并且更改平滑级别无济于事)。

这是使用上述数据生成下图的代码。第二个数字是我试图实现的目标示例,目的是从拟合中读取上升和下降时间。

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import CubicSpline
from scipy.interpolate import UnivariateSpline
from lmfit.models import SkewedGaussianModel

data = np.loadtxt('data.csv', delimiter=',')

x = data[:,0]
y = data[:,1]

# Skewed Gaussian fit
model = SkewedGaussianModel()
params = model.make_params(amplitude=400, center=3, sigma=7, gamma=1)
result = model.fit(y, params, x=x)

# Cubic Spline
cs = CubicSpline(x, y)
x_range = np.arange(x[0], x[-1], 0.1)

# Univariate Spline
us = UnivariateSpline(x, y, k = 1)

# Univariate Spline (smoothed)
us2 = UnivariateSpline(x, y, k = 5)

plt.scatter(x, y, marker = '^', color = 'k', linewidth = 0.5, s = 10, label = 'data')
plt.plot(x_range, cs(x_range), label = 'Cubic Spline')
plt.plot(x_range, us(x_range), label = 'Univariate Spline, k = 1')
plt.plot(x_range, us2(x_range), label = 'Univariate Spline, k = 5')
plt.plot(x, result.best_fit, color = 'red', label = 'Skewed Gaussian Attempt')
plt.xlabel('x')
plt.ylabel('y')
plt.yscale('log')
plt.ylim(1,500)
plt.legend()
plt.show()

Data and fit attempts Example

最佳答案

这里有问题吗?实际上,我没有看到。

lmfit 的结果最适合倾斜的高斯模型。 您已选择在对数刻度上绘制结果。这完全改变了对合身质量或不合身的看法。

您似乎期待更合身,但*不太好。好吧,看起来您的数据并没有完全由一个偏斜的高斯表示。好像你没想到会是这样。您可以为模型函数尝试不同的形式,比如倾斜的洛伦兹函数或其他形式。但是您的数据有很低的 x 肩膀,这绝对不像您未引用的数字。

关于python - Python 中的非对称高斯拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62730830/

相关文章:

python - AttributeError - QThread 和 Win32com

python - 尝试用Python制作一个递归爬行蜘蛛。语法错误: non-keyword arg after keyword arg

python - 使用 float 将正态分布拟合到加权数据

python - 将抛物线形状拟合到数据(是否可以将逻辑语句与 SciPy CurveFit 一起使用?)

javascript - 如何从数据库中解析json格式的数据

python数据帧写入R数据格式

python - 在 Origin 中将破幂律实现为拟合函数

matlab - 如何使用 GPML (Matlab) 制作二维高斯过程进行回归?

java - Eclipse 在将 GaussianBlur 与 OpenCV for Android 一起使用时出错

matlab - 使用经过训练的高斯混合模型标记新数据