我使用sklearn.mix . gmm将两条高斯曲线拟合到数据数组中,然后用数据直方图覆盖它(数据扰动是两条高斯曲线的混合物)。
我的数据是一个浮点数列表,这里是我使用的代码行:
clf = mixture.GMM(n_components=1, covariance_type='diag')
clf.fit(listOffValues)
如果我设置n_components为1,我得到以下错误:
"(或增加n_init)或检查退化数据")RuntimeError:给定初始参数,EM算法无法计算有效的似然。尝试不同的初始化参数(或增加n_init)或检查退化数据
,如果我使用n_components到2,错误是:
(自我。n_components, X.shape [0]))
对于第一个错误,我尝试更改GMM的所有init参数,但没有任何区别。
尝试了一个随机数数组,代码工作得很好。我想不出可能是什么问题。
是否存在我忽略的实现问题?
谢谢你的帮助。
如果我理解正确的话——你想用高斯分布来拟合你的数据分布,并且每个元素只有一个特征。那么你应该将你的向量重塑为列向量:
listOffValues = np.reshape(listOffValues, (-1, 1))
否则,如果你的listOffValues对应于一些曲线,你想用几个高斯函数来拟合它,那么你应该使用curve_fit。参见Python的高斯拟合