SciKit高斯混合模型ValueError:x和y必须具有相同的第一维

时间:2016-12-15 23:13:11

标签: python matplotlib scikit-learn gaussian

我试图通过Python SciKit跟踪此tutorial GMM。问题是原始代码不能开箱即用。它说输入阵列的形状存在问题,而GMM现在已经被淘汰了。我试图将其重写为:

np.random.seed(2)
x = np.concatenate([np.random.normal(0, 2, 200),
                    np.random.normal(5, 5, 200),
                    np.random.normal(3, 0.5, 600)])
x = np.reshape(x, (-1, 1))

plt.hist(x, 80, normed=True)
plt.xlim(-10, 20)
clf = GaussianMixture(4, max_iter=500, random_state=3).fit(x)
xpdf = np.linspace(-10, 20, 1000)
xpdf = np.reshape(xpdf, (-1, 1))
density = np.exp(clf.score(xpdf))

plt.hist(x, 80, normed=True, alpha=0.5)
plt.plot(xpdf, density, '-r')
plt.xlim(-10, 20)

但我仍然得到ValueError: x and y must have same first dimension。据我所知,现在问题已经从数组的形状转移到density变量的形状。但我不确定究竟发生了什么。有人可以对此有所了解吗?感谢。

1 个答案:

答案 0 :(得分:0)

如果检查density的形状,问题会更清楚:

>>> density.shape
()

score方法返回传递的整个数据集的对数似然,这只是一个标量值。您需要score_samples,它将提供每个点的对数似然。

自编写本教程以来,API可能已经发生了变化 - 我不确定。