How to construct and plot uni-variate Gaussian Mixture using its parameters in Python

本秂侑毒 提交于 2020-01-06 18:45:40

问题


I want to construct and 1D plot a uni-variate Gaussian Mixture with say three components in Python where I already have its parameters including mu,sigma,mix coefficients.

What I am after has an equivalent in MATLAB i.e. gmdistribution(mu,sigma,p)

I think the code should look sth like this:

from numpy import *
from matplotlib.pylab import *
from sklearn import mixture

gmm = mixture.GMM(n_components=3)
gmm.means_ = np.array([[-1], [0], [3]])
gmm.covars_ = np.array([[1.5], [1], [0.5]]) ** 2
gmm.weights_ = np.array([0.3, 0.5, 0.2])
fig = plt.figure(figsize=(5, 1.7))

ax = fig.add_subplot(131)
#ax.plot(gmm, '-k') 

Wondering how to do it...

Cheers


回答1:


Assuming the Gaussian's are independent, and you want to plot the pdf, you can just combine the underlying Gaussian pdfs weighted by the probabilities:

import numpy as np
import scipy.stats as ss
import matplotlib.pyplot as plt

means = -1., 0., 3.
stdevs = 1.5, 1., 0.5
weights = 0.3, 0.5, 0.2

x = np.arange(-5., 5., 0.01)

pdfs = [p * ss.norm.pdf(x, mu, sd) for mu, sd, p in zip(means, stdevs, weights)]

density = np.sum(np.array(pdfs), axis=0)
plt.plot(x, density)

That this is correct requires a little elementary probability theory.



来源:https://stackoverflow.com/questions/24878729/how-to-construct-and-plot-uni-variate-gaussian-mixture-using-its-parameters-in-p

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!