使用sklearn在Python中初始化参数

使用sklearn在Python中初始化参数,python,numpy,scikit-learn,gaussian,mixture,Python,Numpy,Scikit Learn,Gaussian,Mixture,我真的很努力地用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)的高斯混合。 我知道每个基因型的权重,每个基

我真的很努力地用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 
我保持列的对数比和强度,并创建一个NumPy数组

datas = [[  0.392805  10.625016]
         [  1.922468  10.765716]
         [  0.22074   10.405445]
         [ -0.059783   9.798655]]
然后,我测试了sklearn v0.18中Mixed的函数GaussianMixture,并尝试了sklearn v0.17中的函数GaussianMixture(我仍然看不到区别,也不知道使用哪一个)

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


我想初始化gaussianMixture或GMM函数中的参数,但我不知道如何格式化数据:(

可以通过明确设定
随机状态
伪随机数生成器来控制结果再现性的随机性

而不是:

gmm = mixture.GaussianMixture(n_components=3)
做:

random\u state
必须是一个
int
:我已将其随机设置为
3
,但您可以选择任何其他整数


当使用相同的
随机\u状态运行多次时,您将得到相同的结果。

您希望每次都得到相同的结果吗?这是您的问题吗?是的,我希望每次都得到相同的结果,我相信如果我能修复初始参数,情况就会如此。好的,看看我的答案;)是的,你是对的,我对random_state有相同的结果,但我仍然想用“weights_init”和“means_init”修复我的初始参数,即使在数组形状中,我也不能直接使用我的权重列表[0.8,0.19,0.01]。我不知道如何设置我的权重和平均值。我不明白为什么你不能把你的
权重
平均值
列表放进去。根据文档,如果像那样通过,它应该可以工作。抛出的错误是什么?错误是“ValueError:参数'weights'应该被规范化,但是Get sum(weights)=0.98377”是的,很抱歉这不是我帖子中的真实错误。我用这个[0.5194072 0.38038109 0.08398024]我检查了高斯混合函数自动计算的重量,它离我的不远,但不一样。
np.sum([0.5194072,0.38038109,0.08398024])=0.98376852999997
:总和必须是
1.0
gmm = mixture.GaussianMixture(n_components=3)
gmm = mixture.GaussianMixture(n_components=3, random_state=3)