从高斯混合模型python采样数据点

时间:2019-03-13 10:16:34

标签: python scikit-learn data-science gaussian mixture-model

我真的是python和GMM的新手。我最近学习了GMM,并尝试实施here

中的代码

运行gmm.sample()方法时遇到了一些问题:

gmm16 = GaussianMixture(n_components=16, covariance_type='full', random_state=0)    
Xnew = gmm16.sample(400,random_state=42)
plt.scatter(Xnew[:, 0], Xnew[:, 1])

错误显示:

TypeError: sample() got an unexpected keyword argument 'random_state'

我检查了最新的文档,发现方法样本应仅包含n,这表示要生成的样本数。但是当我删除'random_state = 42'时,出现新错误:

代码:

Xnew = gmm16.sample(400)
plt.scatter(Xnew[:, 0], Xnew[:, 1])

错误:

TypeError: tuple indices must be integers or slices, not tuple

当您实现Jake VanderPlas的代码时,有人遇到这个问题吗?我该如何解决?

我的Jupyter:

  

笔记本服务器的版本为:5.7.4

     

Python 3.7.1(默认值,2018年12月14日,13:28:58)

     

输入“版权”,“信用”或“许可证”以获取更多信息

     

IPython 7.2.0-增强的交互式Python。输入“?”寻求帮助。

2 个答案:

答案 0 :(得分:0)

您的问题在于将数据馈入散点图的方式。 特别是在元组中有一个numpy数组,并且索引的方式不正确。 试试这个。

plt.scatter(Xnew[0][:,0], Xnew[0][:,1])

基本上,我们拥有的是第一个索引Xnew[0]指向您想要的元组中的元素(numpy数组),第二个将根据需要对其进行切片。 [:,1]在这里,我们获取所有行和第二列。

答案 1 :(得分:0)

您将获得TypeError,因为sample方法返回了tuple,请参见here

这应该可以完成工作:

Xnew, Ynew = gmm16.sample(400)  # if Ynew is valuable
plt.scatter(Xnew[:, 0], Xnew[:, 1])

Xnew, _ = gmm16.sample(400)  # if Ynew isn't valuable
plt.scatter(Xnew[:, 0], Xnew[:, 1])