使用scipy,matplotlib将数据拟合到多模态分布

Ros*_*osh 3 python distribution matplotlib scipy weibull

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

我首先想使用以下方法: 使用Scipy(Python)将经验分布拟合到理论分布?

我的第一个想法是将它与weibull分布相匹配,但数据实际上是多模式的(附图).所以我想我需要组合多个分布,然后将数据拟合到生成的dist中,是吗?也许结合高斯和威布尔分布?

如何将scipy fit()函数与混合/多模态分布一起使用?

另外我想在Python中做这个(即scipy/numpy/matplotlib),因为数据生成器是用Python编写的.

非常感谢 !

数据直方图

Ela*_*eph 7

我建议使用核密度估计(KDE).它为PDF提供了一个解决方案.

SciPy只有高斯内核(看起来很适合你的特定直方图),但你可以在statsmodels或scikit-learn包中找到其他内核.

供参考,这些是相关的功能:

from sklearn.neighbors import KernelDensity
from scipy.stats import gaussian_kde
from statsmodels.nonparametric.kde import KDEUnivariate
from statsmodels.nonparametric.kernel_density import KDEMultivariate
Run Code Online (Sandbox Code Playgroud)

这里是Python中KDE的一个很好的资源.

  • 谢谢你的回答.我认为KDE会让我非常适合我的数据.但是,如何将拟合的KDE曲线表示为数学方程?例如,多项式拟合曲线可以表示为f(x)= x ^ 2 + x + 1(示例).是否可以将通过`stats.gaussian_kde`获得的KDE表示为公式?所以我可以把它写在纸上供其他人重现/重用.谢谢! (3认同)