Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用scipy、matplotlib将数据拟合到多峰分布_Python_Matplotlib_Scipy_Distribution_Weibull - Fatal编程技术网

Python 使用scipy、matplotlib将数据拟合到多峰分布

Python 使用scipy、matplotlib将数据拟合到多峰分布,python,matplotlib,scipy,distribution,weibull,Python,Matplotlib,Scipy,Distribution,Weibull,我有一个数据集,我想适合一个已知的概率分布。其目的是在数据生成器中使用已安装的PDF,以便我可以从已知(已安装)的PDF中采样数据。数据将用于模拟目的。目前我只是从正态分布中取样,这与实际数据不一致,因此模拟结果不准确 我首先想使用以下方法: 我的第一个想法是将其拟合为威布尔分布,但数据实际上是多模态的(附图)。所以我想我需要组合多个分布,然后将数据拟合到结果距离,对吗?也许结合高斯分布和威布尔分布 如何将scipy fit()函数用于混合/多模态分布 此外,我还希望用Python(即scip

我有一个数据集,我想适合一个已知的概率分布。其目的是在数据生成器中使用已安装的PDF,以便我可以从已知(已安装)的PDF中采样数据。数据将用于模拟目的。目前我只是从正态分布中取样,这与实际数据不一致,因此模拟结果不准确

我首先想使用以下方法:

我的第一个想法是将其拟合为威布尔分布,但数据实际上是多模态的(附图)。所以我想我需要组合多个分布,然后将数据拟合到结果距离,对吗?也许结合高斯分布和威布尔分布

如何将scipy fit()函数用于混合/多模态分布

此外,我还希望用Python(即scipy/numpy/matplotlib)实现这一点,因为数据生成器是用Python编写的

非常感谢


我建议使用内核密度估计(KDE)。它以PDF的混合形式为您提供解决方案

SciPy只有高斯内核(对于特定的直方图,它看起来很好),但是您可以在
statsmodels
scikit learn
包中找到其他内核

以下是相关功能,以供参考:

从sklearn.neights导入内核密度
从scipy.stats导入高斯_kde
从statsmodels.nonparametric.kde导入KDEUnivariate
从statsmodels.nonparametric.kernel_密度导入KDEMultivariate

Python中KDE的一个很好的资源是。

感谢Elad的回答。我认为KDE能很好地适应我的数据。但是,我如何将拟合的KDE曲线表示为数学方程?例如,多项式拟合曲线可以表示为f(x)=x^2+x+1(示例)。是否可以将通过
stats.gaussian_KDE
获得的KDE表示为公式?所以我可以把它写在纸上,让其他人复制/重复使用。非常感谢。说真的,我想做一些类似的事情。我正在寻找一种方法来估计一些概率分布的参数-我很确定有一个非常简单的解决方案-也许你知道一个?