2016-12-15 127 views
0

我試圖按照此tutorial GMM與Python SciKit。問題是原始代碼無法正常工作。它說輸入陣列的形狀存在問題,並且GMM現在已經被取消了。我試圖將其改寫爲:SciKit高斯混合模型ValueError:x和y必須具有相同的第一維

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變量的形狀。但我不確定實際發生了什麼。任何人都可以請解釋一下嗎?謝謝。

+0

似乎它是根據GitHub的已知錯誤。他們提供的解決方案是稍微更改源代碼或不使用一維數組。 –

+0

哪個命令拋出錯誤? –

+0

@PaulH錯誤現在似乎在'plot'方法中,並且由''density'變量的形狀引起。我不知道爲什麼,或者在示例中顯示的行爲發生了什麼變化。 – ClonedOne

回答

0

如果選中的density形狀問題會更加清晰:

>>> density.shape 
() 

score方法返回,它是通過整個數據集的數似然,這僅僅是一個單個標值。你想要score_samples,這將提供每個點的對數似然。

自從教程寫完以後,API可能已經改變了 - 我不確定。

相關問題