scikit-learn中的混合模型预测分布

时间:2015-02-18 04:23:16

标签: python scikit-learn mixture-model

我在scikit中提炼出混合物建模的问题,请学习以下一维示例。简单地将混合模型拟合到1D密度。我使用简单的GMM表现出良好的性能,但使用变分或Dirichlet过程GMM的奇怪行为。首先,拟合非常差,其次,推断的分布不规范化(参见下面的代码和图像)。

示例http://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_pdf.html中显示了同样的行为。 GMM类返回的概率近似正常化,而DPGMM返回的概率则不然。通过附加以下行来计算标准化:

print np.sum(np.exp(-Z)) * (x[1] - x[0]) * (y[1] - y[0])

这是一个错误,还是我做错了什么?

代码:

import numpy as np
import numpy.random as rndn

import sklearn.mixture as skmix

import matplotlib.pyplot as plt

X = rnd.randn(0.7 * 300, 1) - 5
X = np.vstack((X, rnd.randn(0.3 * 300, 1) * 0.3 + 3))

# gmm = skmix.GMM(2)
gmm = skmix.DPGMM(2)
gmm.fit(X)

x = np.linspace(-10, 10, 1000)
p = np.exp(gmm.score(x))

plt.hist(X, bins=50, normed=True)
plt.plot(x, p)
plt.show()

integral = np.sum(p) * (x[1] - x[0])
print integral

DPGMM bad fit

0 个答案:

没有答案