理解高斯混合模型

理解高斯混合模型,第1张

理解高斯混合模型

以防将来有人对同样的事情感到疑惑:一个人有
要使单个组件(而不是总和)标准化,请执行以下 *** 作:

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.mixture import GaussianMixture# Define simple gaussiandef gauss_function(x, amp, x0, sigma):    return amp * np.exp(-(x - x0) ** 2. / (2. * sigma ** 2.))# Generate sample from three gaussian distributionssamples = np.random.normal(-0.5, 0.2, 2000)samples = np.append(samples, np.random.normal(-0.1, 0.07, 5000))samples = np.append(samples, np.random.normal(0.2, 0.13, 10000))# Fit GMMgmm = GaussianMixture(n_components=3, covariance_type="full", tol=0.001)gmm = gmm.fit(X=np.expand_dims(samples, 1))# evaluate GMMgmm_x = np.linspace(-2, 1.5, 5000)gmm_y = np.exp(gmm.score_samples(gmm_x.reshape(-1, 1)))# Construct function manually as sum of gaussiansgmm_y_sum = np.full_like(gmm_x, fill_value=0, dtype=np.float32)for m, c, w in zip(gmm.means_.ravel(), gmm.covariances_.ravel(), gmm.weights_.ravel()):    gauss = gauss_function(x=gmm_x, amp=1, x0=m, sigma=np.sqrt(c))    gmm_y_sum += gauss / np.trapz(gauss, gmm_x) * w# Make regular histogramfig, ax = plt.subplots(nrows=1, ncols=1, figsize=[8, 5])ax.hist(samples, bins=50, normed=True, alpha=0.5, color="#0070FF")ax.plot(gmm_x, gmm_y, color="crimson", lw=4, label="GMM")ax.plot(gmm_x, gmm_y_sum, color="black", lw=4, label="Gauss_sum", line)# Annotate diagramax.set_ylabel("Probability density")ax.set_xlabel("Arbitrary units")# Make legendplt.legend()plt.show()


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5666896.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存