2015-10-15 148 views
3

我有一個數據集,我想適合已知的概率分佈。目的是在數據生成器中使用擬合的PDF - 這樣我就可以從已知的(合適的)PDF中採樣數據。數據將用於模擬目的。目前我只是從正態分佈抽樣,與實際數據不一致,因此模擬結果不準確。用scipy,matplotlib擬合數據到多模態分佈

我第一次想用下面的方法: Fitting empirical distribution to theoretical ones with Scipy (Python)?

我首先想到的是它適合威布爾分佈,但數據實際上是多(圖片附後)。所以我想我需要合併多個分佈,然後將數據擬合到最終的分佈,是嗎?也許結合高斯和威布爾分佈?

如何在混合/多模態分佈中使用scipy fit()函數?

另外我想在Python(即scipy/numpy/matplotlib)中這樣做,因爲數據生成器是用Python編寫的。

非常感謝!

histogram of data

回答

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

+2

謝謝Elad的回答。我認爲KDE會讓我很適合我的數據。但是,如何將擬合的KDE曲線表示爲數學方程?例如多項式擬合曲線可以表示爲f(x)= x^2 + x + 1(示例)。是否可以將通過'stats.gaussian_kde'獲得的KDE表示爲公式?所以我可以把它放在紙上供其他人重現/重複使用。謝謝! – Rosh

+0

認真的一個很好的資源 –

+0

我想做類似的事情(看[這裏](https://stackoverflow.com/questions/44934808/fitting-multimodal-distrubtion))。我正在尋找一種估計多個概率分佈參數的方法 - 我確定有一個相當簡單的解決方案 - 也許你知道一個? – displayname