4

我正在努力用 sklearn 做一个高斯混合,但我认为我错过了一些东西,因为它肯定不起作用。

我的原始数据如下所示:

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()

这是我得到的,这是一个很好的结果,但它每次都会改变,因为每次运行初始参数的计算方式都不同

在此处输入图像描述

我想在 gaussianMixture 或 GMM 函数中初始化我的参数,但我不明白我必须如何格式化我的数据:(

4

1 回答 1

1

可以通过显式播种random_state伪随机数生成器来控制结果可重复性的随机性。

代替 :

gmm = mixture.GaussianMixture(n_components=3)

做 :

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

random_state必须是int:我随机设置为,3但您可以选择任何其他整数。

多次运行相同的random_state,你会得到相同的结果。

于 2016-11-08T15:21:37.873 回答