2016-11-08 33 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