【问题标题】:How to plot the pdf of a 1D Gaussian Mixture Model with matplotlib如何使用 matplotlib 绘制一维高斯混合模型的 pdf
【发布时间】:2017-02-20 19:02:22
【问题描述】:

我想绘制一个高斯混合模型。下面的代码允许我绘制 2 个单独的高斯分布,但在它们相交的地方,线条非常锐利且不够平滑。有没有办法绘制一维 GMM 的 pdf?

def plot_data():
    mu = [-6, 5]
    var = [2, 3]
    sigma = [np.sqrt(var[0]), np.sqrt(var[1])]
    x = np.linspace(-10, 10, 100)
    curve_0 = mlab.normpdf(x, mu[0], sigma[0])
    curve_1 = mlab.normpdf(x, mu[1], sigma[1])
    import ipdb; ipdb.set_trace()
    plt.plot(x, curve_0, color='grey')
    plt.plot(x, curve_1, color='grey')
    plt.fill_between(x,curve_0 , color='grey')
    plt.fill_between(x,curve_1, color='grey')
    plt.show()
    plt.savefig('data_t0.jpg')

【问题讨论】:

  • 您可能首先想了解高斯混合模型的概率密度函数是什么样子的:)

标签: python matplotlib gmm


【解决方案1】:

您也可以从高斯混合模型中抽取样本并绘制经验密度/直方图:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
n = 10000 # number of sample to be drawn
mu = [-6, 5]
sigma = [2, 3]
samples = []
for i in range(n): # iteratively draw samples
    Z = np.random.choice([0,1]) # latent variable
    samples.append(np.random.normal(mu[Z], sigma[Z], 1))
sns.distplot(samples, hist=False)
plt.show()
sns.distplot(samples)
plt.show()

【讨论】:

    【解决方案2】:

    你必须形成密度的凸组合

    curve = p*curve_0 + (1-p)*curve_1
    

    其中p是样本来自第一个高斯的概率。

    【讨论】:

      猜你喜欢
      • 2014-10-08
      • 2018-07-19
      • 2017-02-26
      • 2021-09-30
      • 1970-01-01
      • 2019-08-06
      • 2021-12-28
      • 2021-10-12
      • 1970-01-01
      相关资源
      最近更新 更多