如何使用sklearn将GMM拟合到1D高斯图?

时间:2017-11-07 00:35:19

标签: python scikit-learn

我意识到有几篇文章演示了如何将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恢复的)。

有更简单的方法吗? (我意识到我可以使用最小二乘拟合来恢复初始高斯,但同样,我试图最终使用它来确定构成最终高斯分布的两个基础高斯分布。)

谢谢!

0 个答案:

没有答案