我意识到有几篇文章演示了如何将GMM适用于带有sklearn([1]和[2]的1D Gaussian(仅举几例)。然而,在所有这些情况下,数据作为单个点存在,其中分布是高斯分布。在我的情况下,我基本上有一个频率表(我正在处理光谱数据),其中分布是高斯分布,但个别点是未知的。
我的发布(即我试图拟合的数据)如下所示:1D Gaussian Peak
我想用GMM去卷积构成这个峰值的2个初始高斯分布。
到目前为止,我已经尝试了以下内容(假设我的数据是一个200x2阵列,位置在一列中,AFU在第二列中):
import numpy as np
from sklearn import mixture
import matplotlib.pyplot as plt
def gengmm(nc=4, n_iter = 2):
g = mixture.GMM(n_components=nc) # number of components
g.init_params = "" # No initialization
g.n_iter = n_iter # iteration of EM method
return g
我试着看看我是否可以将这个峰值适合单个高斯:
g = gengmm(1, 100)
g.fit(data)
然而,我得到的均值和协方差并没有特别好地定义我的数据(值得注意的是,高斯分布的平均值是127.5,这不是用1分量GMM恢复的)。
有更简单的方法吗? (我意识到我可以使用最小二乘拟合来恢复初始高斯,但同样,我试图最终使用它来确定构成最终高斯分布的两个基础高斯分布。)
谢谢!