【问题标题】:Fitting data to multimodal distributions with scipy, matplotlib使用 scipy、matplotlib 将数据拟合到多峰分布
【发布时间】:2016-01-14 12:18:30
【问题描述】:

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

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

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

如何在混合/多模式分布中使用 scipy fit() 函数?

我也想在 Python 中执行此操作(即 scipy/numpy/matplotlib),因为数据生成器是用 Python 编写的。

非常感谢!

【问题讨论】:

    标签: python matplotlib scipy distribution weibull


    【解决方案1】:

    我建议使用核密度估计 (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

    【讨论】:

    • 感谢 Elad 的回答。我认为 KDE 可以很好地适应我的数据。但是,如何将拟合的 KDE 曲线表示为数学方程?例如,多项式拟合曲线可以表示为 f(x) = x^2 + x + 1(示例)。是否可以将通过stats.gaussian_kde 获得的 KDE 表示为公式?所以我可以把它写在纸上供其他人复制/重用。谢谢!
    • 真的是一个很棒的资源
    • 我想做类似的事情(看here)。我正在寻找一种方法来估计一些概率分布的参数 - 我很确定有一个非常简单的解决方案 - 也许你知道一个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2014-03-19
    • 1970-01-01
    • 2011-10-01
    • 2011-05-16
    • 2019-07-01
    • 2013-07-29
    相关资源
    最近更新 更多