当前位置: 首页 > 科技观察

大观数据:一篇讲解高斯混合模型原理的文章

时间:2023-03-14 20:11:54 科技观察

本文通过生动的案例,深入浅出地讲解了高斯混合模型的原理,分析了高斯混合模型与另一种常见聚类算法的关系K-均值。什么是高斯混合模型(GaussianMixtureModel)高斯混合模型(GaussianMixtureModel,简称GMM)通常简称为GMM,是业界广泛使用的一种聚类算法。该方法以高斯分布为参数模型,使用期望***(ExpectationMaximization,简称EM)算法进行训练。本文以通俗易懂的方式讲解该方法的原理,希望能帮助读者更直观地理解该方法的原理。文中的***还分析了高斯混合模型与另一种常用聚类算法K-means的关系。实际上,在一定的约束条件下,K-means算法可以看作是高斯混合模型(GMM)的一部分。一种特殊的形式。1.什么是高斯分布?高斯分布(Gaussiandistribution)有时也被称为正态分布(normaldistribution),它是自然界中存在的最常见的分布形式。在提供精确的数学定义之前,先用一个简单的例子来说明。如果我们随机抽取大量人群的身高数据,将采集到的身高数据绘制成直方图,就会得到如下图1所示的图形。这张图模拟了334个成年人的统计数据。可以看到图中出现最多的高度在180cm左右和2.5cm左右的区间内。图1:由334个人的身高数据组成的正态分布直方图。这张图非常直观地展示了高斯分布的形状。接下来看高斯公式的严格定义。高斯分布的概率密度函数公式如下:公式包含两个参数,参数μ表示均值,参数σ表示标准差。平均值对应于正态分布的中间位置。在这个例子中我们可以推测均值在180cm左右。标准差衡量数据围绕均值分布的程度。大学学过高数的同学应该记得,正态分布的一个背景知识点是95%的数据都分布在均值附近2个标准差之内。在这个例子中,标准偏差参数的值大约在20到30之间,因为大部分数据分布在120cm到240cm之间。上式为概率密度函数,即在参数已知的情况下,输入变量指x,即可得到对应的概率密度。还有一点需要注意的是,在实际使用之前,必须对概率分布进行归一化处理,即曲线下面积之和需要为1,以保证返回的概率密度在允许值范围内范围。如果需要计算指定区间内的分布概率,可以计算区间第一个值和最后一个值之间的面积大小。除了直接计算面积,还可以使用更简单的方法得到相同的结果,即减去区间x对应的累积密度函数(CDF)。因为CDF代表的是值小于等于x的分布概率。现在我们回到前面的例子来评估参数和相应的实际数据。假设我们使用柱状线来表示分布概率。每条柱状线表示对应身高值在334个人中的分布概率。将每个身高值对应的人数除以总人数(334)即可得到对应的概率值。图2用左边的红线(SampleProbability)来表示。如果我们设置参数μ=180,σ=28,用累积密度函数计算对应的概率值——右边的绿线(ModelProbability),肉眼可以观察到模型拟合的准确度.图2图2:对于给定的用户,身高分布的采样概率用红色直方图表示,高斯模型在参数μ=180,σ=28时计算的概率用绿色直方图表示。观察图2,我们可以看到,刚才我们猜测的均值参数180和标准差参数28的拟合效果很好,虽然可能小了一点。当然,我们可以不断调整参数来更好地拟合,但更准确的方法是通过算法生成。这个过程称为模型训练。最常用的方法是Expectation***(EM)算法,后面会详细讲解。顺带一提,采样数据的分布与整体数据总是存在一定差异的。这里首先假设采集到的334个用户的数据可以代表整个人群的身高分布。此外,我们还假设隐含数据分布为高斯分布,并以此绘制分布曲线,并以此为前提估计潜在分布。如果收集的数据越来越多,通常身高的分布会越来越趋于高斯分布(虽然还有其他不确定因素),模型训练的目的就是在这些假设下尽可能的减少不确定性。2.期望***和高斯模型训练模型的EM训练过程直观来说就是:我们通过观察采样概率值与模型概率值的接近程度来判断一个模型是否拟合得好。然后调整模型,使新模型更好地拟合采样概率值。多次迭代这个过程,直到两个概率值非常接近,我们停止更新,完成模型训练。现在我们要用一个算法来实现这个过程。使用的方法是利用模型生成的数据来确定似然值,即通过模型计算数据的期望值。通过更新参数μ和σ来最大化期望值。可以迭代这个过程,直到迭代之间产生的参数变化非常小。这个过程和k-means的算法训练过程很相似(k-means不断更新类中心来最大化结果),只不过这里的高斯模型中,我们需要同时更新两个参数:均值分布值和标准差3.高斯混合模型(GMM)高斯混合模型是高斯模型的简单扩展。GMM使用多个高斯分布的组合来描述数据分布。我举一个具体的例子来说明一下:想象一下,我们现在不考虑所有用户的身高,而是考虑模型中男性和女性的身高。假设之前的样本中既有男性也有女性,那么之前绘制的高斯分布其实就是两个高斯分布叠加的结果。我们现在可以使用两个(或更多)高斯分布代替仅使用一个高斯分布进行建模:该公式与前一个非常相似,但在细节上存在一些差异。首先,分布概率是K个高斯分布的总和。每个高斯分布都有自己的μ和σ参数,以及相应的权重参数。权重值必须是正数,所有权重之和必须等于1,以保证公式给出的值是似是而非的概率密度值。换句话说,如果我们将这个公式对应的输入空间组合起来,结果将等于1。回到前面的例子,在身高分布上,女性通常比男性矮,如图3所示:图3:概率分布男性和女性身高图3中y轴所示的概率值是在已知每个用户的性别的前提下计算得出的。但是通常我们没有这些信息(可能是收集数据的时候没有记录),所以我们不仅需要学习每个分布的参数,还需要生成性别划分()。在确定期望值时,需要根据加权值生成相应的男性和女性身高概率值,并将它们相加。请注意,尽管模型现在更加复杂,但仍然可以使用与以前相同的技术来训练模型。在计算期望值(可能是从已经混合的数据中产生)时,只需要一个更新参数的最优期望策略。4.高斯混合模型学习例子在前面的简单例子中,使用了一维高斯模型:即只有一个特征(身高)。但高斯并不局限于一维,很容易将均值展开为向量,将标准差展开为协方差矩阵,用n维高斯分布来描述多维特征。以下程序清单显示了通过scikit-learn的高斯混合模型运行聚类并可视化结果。初始化GMM算法时,传入如下参数:-n_components——用户混合的高斯分布数。在前面的例子中是2.-covariance_type-同意协方差矩阵的属性,即高斯分布的形状。有关详细信息,请参阅以下文档:http://scikit-learn.org/stable/modules/mixture.html-n_iter-为EM运行的迭代次数。计算结果如下图(鸢尾花数据集):关于make_ellipses——make_ellipses来自plot_gmm_classifier方法,由scikit-learn的RonWeiss和GaelVaroquaz编写。根据协方差矩阵绘制的二维图,可以找出方差最大和次大的坐标方向,以及对应的量级。然后用这些坐标轴画出相应的高斯分布椭圆。这些轴方向和大小分别称为特征向量和特征值。图4:Iris数据集二维高斯聚类结果的4维图作为参数,运行后根据指定坐标轴绘制对应的椭圆。5.k-means和GMM的关系在一定条件下,k-means和GMM方法可以用彼此的思想来表达。在k-means中,每个点的类别是根据离该点最近的类别中心来标记的。这里的假设是每个类簇的规模接近,并且特征分布没有不均匀性。这也解释了为什么在使用k-means之前对数据进行归一化是有效的。高斯混合模型不受此约束,因为它分别检查每个聚类的特征协方差模型。K-means算法可以看作是一种特殊形式的高斯混合模型(GMM)。总的来说,高斯混合模型可以提供更强的描述能力,因为聚类时数据点的隶属关系不仅与邻居有关,还取决于聚类的形状。n维高斯分布的形状由每个簇的协方差决定。对协方差矩阵加入特定约束后,通过GMM和k-means可以得到相同的结果。在实践中,如果每个簇的协方差矩阵都绑定在一起(即完全相同),并且矩阵对角线上的协方差值保持不变,其他值都为0,那么就有可能生成形状是圆形的簇。在这种情况下,每个点总是属于与最近的中间点对应的类。在k-means方法中,使用EM训练高斯混合模型时,对初值的设置非常敏感。与k-means相比,GMM方法需要设置更多的初始条件。在实践中,不仅指定了初始类中心,而且还设置了协方差矩阵和混合权重。在这里您可以运行k-means来生成类中心并将它们用作高斯混合模型的初始条件。可以看出,两种算法的处理过程相似,主要区别在于模型的复杂度。总的来说,所有无监督机器学习算法都遵循一个简单的模式:给定一组数据,训练一个模型来描述该数据中的模式(并期望底层过程生成数据)。训练过程通常会不断迭代,直到无法再优化参数,以获得更适合数据的模型。【本文为专栏作者“大观数据”原创稿件,如需转载可通过专栏取得联系】点此查看该作者更多好文