我使用sklearn.mixture.GMM将两条高斯曲线拟合到一个数据数组中,然后用数据直方图覆盖它(数据干扰是2条高斯曲线的混合)。
我的数据是浮点数列表,这是我正在使用的代码行:
clf = mixture.GMM(n_components=1, covariance_type='diag')
clf.fit(listOffValues)
如果我将n_components设置为1,我会收到以下错误:
"(或增加n_init)或检查退化数据。") RuntimeError:EM算法从未能够在给定初始参数的情况下计算有效似然。尝试不同的init参数(或增加n_init)或检查退化数据。
如果我使用n_components到2则出现错误:
(self.n_components,X.shape [0])) ValueError:使用2个组件进行GMM估算,但只获得1个样本。
对于第一个错误,我尝试更改GMM的所有初始化参数,但它没有任何区别。
尝试了一组随机数,代码工作正常。 我无法弄清楚可能出现的问题。
是否存在我忽视的实施问题?
感谢您的帮助。
答案 0 :(得分:0)
如果我理解正确 - 您希望适合高斯人的数据分布,并且每个元素只有一个特征。比你应该将你的矢量重塑为一个列矢量:
listOffValues = np.reshape(listOffValues, (-1, 1))
否则,如果你的listOffValues对应于你想要与几个高斯拟合的曲线,那么你应该使用curve_fit。见Gaussian fit for Python