【问题标题】:Fitting data points to a cumulative distribution将数据点拟合到累积分布
【发布时间】:2013-09-21 21:41:39
【问题描述】:

我正在尝试将伽玛分布拟合到我的数据点,我可以使用下面的代码来做到这一点。

import scipy.stats as ss
import numpy as np
dataPoints = np.arange(0,1000,0.2)
fit_alpha,fit_loc,fit_beta = ss.rv_continuous.fit(ss.gamma, dataPoints, floc=0)

我想使用许多这样小的伽马分布来重建一个更大的分布(更大的分布与这个问题无关,只是证明我为什么要拟合 cdf 而不是 pdf)。

为了实现这一点,我希望将累积分布(而不是 pdf)拟合到较小的分布数据。—更准确地说,我希望仅将数据拟合到累积分布的一部分强>。

例如,我只想拟合数据,直到累积概率函数(具有一定的比例和形状)达到 0.6。

对使用fit() 有什么想法吗?

【问题讨论】:

  • 您能否从您的数据中构造一个经验 cdf 并使用例如 curve_fit、docs.scipy.org/doc/scipy/reference/generated/… 将其拟合到 gamma cdf?
  • 我认为您的 ss.gamma.fit(dataPoints, floc=0) 不会产生任何有意义的结果,因为您的 dataPoints 不是来自伽马分布的样本。 fit 只能从一个样本点估计分布参数。如果您只想适应 cdf 的形状,请按照甄亚的建议。或者,将样本点拟合到伽马分布的截断版本。
  • @Zhenya 是的,我认为这是最后的手段,如果执行此操作的功能不可用,出于多种原因,一个是我想为此使用 MLE 而不是最小二乘.其次,伽马的 cdf 有点不重要(但当然可能)。第三,您知道我如何限制问题中提到的拟合吗?
  • en.wikipedia.org/wiki/Truncated_distribution 和 ppf 是 scipy.stats.distributions 中调用的逆 cdf(分位数函数)。
  • 正如@qarma 所指出的,将数据点拟合到cdf 并非没有问题,因为与传统的估计器相比,它增加了额外的语义。一个原因是对cdf 估计器的拟合对于坐标变换(例如F(x) => F(-x),或多变量情况下的旋转)不是不变的,因为积分方向(例如x 或-x)很重要. @Benjamin,您能否提供更多见解,查看cdfs 而不是pdfs 的动机是什么?

标签: python numpy scipy probability-density cdf


【解决方案1】:

我了解您正在尝试使用几个小的 gamma 分布分段重建您的 cdf,每个分布具有不同的比例和形状参数,用于捕获分布的“本地”区域。

如果您的经验分布是多模态/难以用一个“全局”参数分布来概括,这可能是有意义的。

不知道您是否有专门拟合几个伽马分布的具体原因,但如果您的目标是尝试拟合一个相对平滑并很好地捕捉您的经验 cdf 的分布,也许您可​​以看看 Kernel Density估计。它本质上是一种将分布拟合到数据的非参数方法。

http://scikit-learn.org/stable/modules/density.html http://en.wikipedia.org/wiki/Kernel_density_estimation

例如,您可以尝试使用高斯核并更改带宽参数来控制拟合的平滑程度。带宽太小会导致结果不平滑(“过度拟合”)[高方差,低偏差]。太大的带宽会导致非常平滑的结果,但具有高偏差。

from sklearn.neighbors.kde import KernelDensity
kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(dataPoints) 

然后选择一个平衡偏差的带宽参数的好方法 - 方差权衡是使用交叉验证。本质上,高级想法是您对数据进行分区,对训练集进行分析并在测试集上“验证”,这将防止数据过度拟合。

幸运的是,sklearn 还实现了一个很好的示例,使用交叉验证选择高斯内核的最佳带宽,您可以从中借用一些代码:

http://scikit-learn.org/stable/auto_examples/neighbors/plot_digits_kde_sampling.html

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 2017-10-31
    • 2019-09-06
    • 2017-08-30
    • 2017-11-02
    • 1970-01-01
    • 2012-04-29
    • 2011-05-16
    相关资源
    最近更新 更多