我真的是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。输入“?”寻求帮助。
答案 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])