用Sklearn如何将一个GMM拟合到1D高斯图中?

2024-04-20 13:35:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有好几篇文章演示了如何用sklearn将GMM与1D高斯相匹配([1]和{a2},仅举几篇)。然而,在所有这些情况下,数据都是以单点形式呈现的,其中分布是高斯分布。在我的例子中,我基本上有一个频率表(我在处理光谱数据),其中的分布是高斯分布,但个别点是未知的。在

我的分布(即,我试图匹配的数据)如下所示: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

我试着看看是否能把这个峰值拟合成一个高斯函数:

^{pr2}$

然而,我得到的平均值和协方差并不能很好地定义我的数据(值得注意的是,高斯分布的平均值是127.5,这不是用单分量GMM恢复的值)。在

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

谢谢!在


Tags: of数据方法importa2as文章components