【问题标题】:Fitting a weighted histogram with a normal distribution用正态分布拟合加权直方图
【发布时间】:2014-01-30 14:01:16
【问题描述】:

我知道如何使用 SCipy 库 (Fitting a histogram with python) 将输入直方图的数据拟合成正态分布,但如果在数据之上我还有一组具有相同维度的权重,我怎么能做到这一点。是否有合适的功能,或者我应该创建第二个由数据提供的数组并自己加权?

干杯。

编辑:

这几乎已经在这里回答了:

Weighted standard deviation in NumPy?

【问题讨论】:

    标签: python scipy histogram


    【解决方案1】:

    如果您正在寻找正态分布 N(mu, sigma) 您可以根据输入数据准确计算出 mu 和 sigma。

    例如:X = x1,...,xN 是值,W = w1,...,wN 是它们的权重

    mu = sum (X * W) / sum(W)
    sigma = np.sqrt (sum (W * (X- mu)**2) / sum(W))
    

    如果您要适应另一种分布,我建议使用 OpenTURNS 库回答here

    【讨论】:

      【解决方案2】:

      只需使用scipy.histogram 上的权重参数并传入您的权重数组:

      scipy.stats.histogram(a, numbins=10, defaultlimits=None, weights=None, printextras=False)
      

      来自文档:

      weights : array_like, optional a 中每个值的权重。 默认为无,即为每个值赋予 1.0 的权重


      注意:自 v1.0 起,scipy does not have the function histogram,但自 v1.11 起 histogram appears in numpy,具有相似(但不相同)的调用签名,包括 weights= 参数:

      numpy.histogram(a, bins=10, range=None, normed=False, weights=None, density=None)
      

      【讨论】:

      • 嗯,我一直在用它来绘制加权数据,但我也想适应它来处理权重。虽然,使用 scipy.stats.norm.fit() 方法是不可能的,但它似乎没有额外的 weight 参数。
      • 如果您希望以编程方式生成权重,不妨看看stackoverflow.com/questions/11373192/…
      • 呃,这似乎不是我想要的,我想要估计加权直方图的均值和方差(以及它看起来像正态分布的程度)不从中生成样本。
      • “看起来有多像正态分布”并没有任何意义。您检查样本的平均值及其方差以查看它是否接近正常,但这与直方图无关。直方图只是一种视觉表示。如果您想以更简单的方式查看您的样品,您可以使用Kernal Density Estimation
      • 至于计算加权均值和方差,这似乎是您问题的症结所在,我相信您可以想象如何在 python 中进行计算,有一个函数可以进行这样的基本计算。然后只需使用normality test
      猜你喜欢
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 2019-10-06
      • 2021-12-04
      相关资源
      最近更新 更多