2017-02-20 47 views
0

我想绘制高斯混合模型。下面的代码允许我绘制两个独立的高斯,但是它们相交的地方,线条非常锐利而且不够光滑。有没有办法绘制一维GMM的pdf?如何使用matplotlib绘制一维高斯混合模型的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') 
+0

你首先可能要找出如何高斯混合的概率密度函数模型看起来像:) – cel

回答

0

你必须形成密度的凸组合

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

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

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() 

enter image description here

相关问题