2016-11-08 81 views
2

我想要用sklearn來做高斯混合,但我想我錯過了一些東西,因爲它確實無法工作。使用sklearn初始化Python中的高斯混合函數

我原來DATAS是這樣的:

Genotype LogRatio Strength 
AB  0.392805 10.625016 
AA  1.922468 10.765716 
AB  0.22074 10.405445 
BB  -0.059783 10.625016 

我想要做一個高斯混合3種成分= 3種基因型(AA | AB | BB)。 我知道每種基因型的重量,每種基因型的對數比率的平均值和每種基因型的強度的平均值。

wgts = [0.8,0.19,0.01] # weight of AA,AB,BB 
means = [[-0.5,9],[0.5,9],[1.5,9]] # mean(LogRatio), mean(Strenght) for AA,AB,BB 

我保留列LogRatio和Strength並創建一個NumPy數組。

datas = [[ 0.392805 10.625016] 
     [ 1.922468 10.765716] 
     [ 0.22074 10.405445] 
     [ -0.059783 9.798655]] 

然後我從sklearn v0.18測試的混合物,功能GaussianMixture,也試圖從sklearn v0.17功能GaussianMixtureModel(我還沒有看到其中的差別,不知道用哪一個) 。

gmm = mixture.GMM(n_components=3) 
OR 
gmm = mixture.GaussianMixture(n_components=3) 

gmm.fit(datas) 

colors = ['r' if i==0 else 'b' if i==1 else 'g' for i in gmm.predict(datas)] 
ax = plt.gca() 
ax.scatter(datas[:,0], datas[:,1], c=colors, alpha=0.8) 
plt.show() 

這是我獲得,這是一個很好的結果,但它的變化,因爲初始參數計算不同每次運行

Results of clusterization

我想以初始化gaussianMixture我的參數每次或GMM功能,但我不明白我如何合成我的數據:(

+0

您希望每次都有相同的結果嗎?這是你的問題嗎? – MMF

+0

是的,我想每次都得到相同的結果,我相信如果我能修復初始參數,情況就會如此。 – Elysire

+0

好的,看看我的答案然後;) – MMF

回答

0

可以通過明確播種來控制結果再現性的隨機性僞隨機數發生器。

相反的:

gmm = mixture.GaussianMixture(n_components=3) 

務必:

gmm = mixture.GaussianMixture(n_components=3, random_state=3) 

random_state必須是int:我隨意將其設置爲3但你可以選擇任何其他的整數。

當使用相同的random_state運行多次時,您將得到相同的結果。

+0

是的,你是對的我有與random_state相同的結果,但我仍然想修復我的初始參數與「weights_init」和「means_init」,我不能使用我的權重列表[ 0.8,0.19,0.01]直接甚至是陣列形狀。我不知道如何合成我的體重和手段。 – Elysire

+0

我不明白你爲什麼不能把你的「權重」和「手段」列表。根據文件它應該工作,如果通過那樣。拋出的錯誤是什麼? – MMF

+0

錯誤是「ValueError:參數'權重'應歸一化,但得到總和(權重)= 0.98377」 – Elysire