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

时间:2015-10-15 21:20:12

标签: python matplotlib scipy distribution weibull

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

我首先要使用以下方法: Fitting empirical distribution to theoretical ones with Scipy (Python)?

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

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

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

非常感谢!

histogram of data

1 个答案:

答案 0 :(得分:6)

我建议使用核密度估算(KDE)。它为您提供了PDF的混合解决方案。

SciPy只有高斯内核(看起来很适合你的特定直方图),但你可以在statsmodelsscikit-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

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