【问题标题】:lognormal mixture in pythonpython中的对数正态混合
【发布时间】:2014-09-22 02:50:15
【问题描述】:

我正在尝试将 3 个正态分布的混合物拟合到我的转换数据日志中,但我有点困惑如何去做。我尝试了 scikit learn python 中的 gmm 函数,但它似乎无法正常工作。

g = mixture.GMM(n_components=3)
g.fit(lines)  
f1 = arange(0, 13, 0.01)   
f2 = arange(0, 13, 0.01)    
f3 = arange(0, 13, 0.01)    
f = arange(0, 13, 0.01)

for x in arange(0, 13, 0.01):       
    f1[x] = numpy.round(g.weights_[0],5) * numpy.exp(-numpy.power(x - means[0], 2) / 2 *  numpy.power(covars[0], 2)) * (1 / (covars[0] * numpy.power(2 * pi, 0.5)))    
    f2[x] = numpy.round(g.weights_[1],5) * numpy.exp(-numpy.power(x - means[1], 2) / 2 * numpy.power(covars[1], 2)) * (1 / (covars[1] * numpy.power(2 * pi, 0.5)))    
    f3[x] = numpy.round(g.weights_[2],5) * numpy.exp(-numpy.power(x - means[2], 2) / 2 * numpy.power(covars[2], 2)) * (1 / (covars[2] * numpy.power(2 * pi, 0.5)))

f=f1+f2+f3   
plt.plot(f)   
plt.show()

最后我想得到一个 3 个分量的 pdf 图,即 f=f1+f2+f3。但是它不起作用。

是因为我试图将法线混合拟合对数正态数据吗?

能否请您解释我的错误和/或就用于拟合对数正态混合的软件包提供建议?

【问题讨论】:

  • 您是否遇到了特定错误?
  • 没有。只是我无法绘制 GMM 计算的混合分布,我很困惑为什么。
  • 我其实对这个模块不太熟悉,但是g.fit(lines) 行中的lines 呢?你是如何产生这些的?
  • 使用 p = g.score_samples(x)[0] 得到估计概率

标签: python statistics mixture-model


【解决方案1】:

这是我使用 OpenTURNS 库混合了 3 个 LogNormal 分布

import openturns as ot
from openturns.viewer import View

distribution1 = ot.LogNormal(0.01, 0.8, 3.)
distribution2 = ot.LogNormal(0.01, 0.5, 0.)
distribution3 = ot.LogNormal(0.1, 1., 7.)

final_dist = ot.Mixture([distribution1, distribution2, distribution3]) 

graph = final_dist.drawPDF()

View(graph, add_legend=False)

这是你要找的吗?

您可以通过调用final_dist.computePDF([p]) 访问任何点 p 中生成的 PDF 的值,并将其拟合到您的数据中。

如果你熟悉 matplotlib 和 numpy,这里是使用这些的相同情节

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 18, 100).reshape(-1, 1)
plt.plot(x, final_dist.computePDF(x))

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2017-08-31
    • 2014-12-11
    • 2021-10-23
    相关资源
    最近更新 更多