我有一个数据集x
,它是作为四个不同高斯混合的样本生成的:
mus = [60,150,300,500]
sigmas = [5,10,10,50]
Ns = [380,670,440,810]
Ns_rel = [i/sum(Ns) for i in Ns]
x = []
for mu,sig,N in zip(mus,sigmas,Ns):
x = np.append(x,st.norm(mu,sig).rvs(N))
通过数据集seaborn.kdeplot(x)
x
的核密度图产生:
高斯混合物的“实际”密度的曲线产生 - 然而 - 完全不同的图表:
x_plot = np.arange(-200,1400)
y_plot = np.zeros(1600)
for mu,sig,N in zip(mus,sigmas,Ns_rel):
y_plot += st.norm(mu,sig).pdf(x_plot)*N
将样本的核密度估计与实际密度一起绘制产生两个完全不同的图:
sns.kdeplot(x, label="Density Estimation of sample of Gaussian Mixture")
plt.plot(x_plot,y_plot, "-", label="Real density of Gaussian Mixture")
plt.legend()
密度和密度估计应该非常相似,特别是当我的例子中有如此多的样本时。
我在这里做错了什么?