sklearn.mixture.GMM将多条高斯曲线拟合成直方图,EM算法错误

时间:2015-09-22 16:16:47

标签: python machine-learning scikit-learn curve-fitting gaussian

我使用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的所有初始化参数,但它没有任何区别。

尝试了一组随机数,代码工作正常。 我无法弄清楚可能出现的问题。

是否存在我忽视的实施问题?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果我理解正确 - 您希望适合高斯人的数据分布,并且每个元素只有一个特征。比你应该将你的矢量重塑为一个列矢量:

listOffValues = np.reshape(listOffValues, (-1, 1))

否则,如果你的listOffValues对应于你想要与几个高斯拟合的曲线,那么你应该使用curve_fit。见Gaussian fit for Python