【发布时间】:2021-06-12 00:36:00
【问题描述】:
我使用GaussianMixture 来分析多峰分布。从 GaussianMixture 类中,我可以使用属性means_ 和covariances_ 访问均值和协方差。我现在如何使用它们来绘制两个潜在的单峰分布?
我曾想过使用scipy.stats.norm,但我不知道选择什么作为loc 和scale 的参数。所需的输出将类似于附图所示。
本题示例代码是根据here的答案修改的。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import mixture
from scipy.stats import norm
ls = np.linspace(0, 60, 1000)
multimodal_norm = norm.pdf(ls, 0, 5) + norm.pdf(ls, 20, 10)
plt.plot(ls, multimodal_norm)
# concatenate ls and multimodal to form an array of samples
# the shape is [n_samples, n_features]
# we reshape them to create an additional axis and concatenate along it
samples = np.concatenate([ls.reshape((-1, 1)), multimodal_norm.reshape((-1,1))], axis=-1)
print(samples.shape)
gmix = mixture.GaussianMixture(n_components = 2, covariance_type = "full")
fitted = gmix.fit(samples)
print(fitted.means_)
print(fitted.covariances_)
# The idea is something like the following (not working):
new_norm1 = norm.pdf(ls, fitted.means_, fitted.covariances_)
new_norm2 = norm.pdf(ls, fitted.means_, fitted.covariances_)
plt.plot(ls, new_norm1, label='Norm 1')
plt.plot(ls, new_norm2, label='Norm 2')
【问题讨论】:
-
我不明白,你为什么要在均匀间隔的向量和 multimodal_norm 上做高斯混合?
-
我想我搞砸了fit method,其中提到了 y。我用以下内容替换了该行:
samples = multimodal_norm.reshape((-1, 1))
标签: python distribution gaussian multimodal