Bengxy

GMM高斯混合模型和EM算法

字数统计: 1.4k阅读时长: 5 min
2016/03/11 Share

引言

网上有许多讲GMM高斯混合模型的博客和课件,但是感觉都是一上来就套理论,讲公式。对于机器学习新人来说,比较难理解:收什么启发,我们提出GMM?适用哪些场景?以及GMM的理论支撑,如为什么GMM是可行的聚类算法(收敛原因)?
因此我整理了一下自己在看GMM时候的困惑以及一些理解。

GMM: 高斯混合模型。通过假设数据服从K个混合高斯分布。或者这样讲:数据能够由K个确定的高斯分布以一定的权重叠加生成。 高斯混合模型的目的就是从数据集求出这K个高斯分布的参数 ${\theta_k}$

一维二分类的有监督例子

考虑一个一维的二类有监督问题,告诉你两类数据分别由两种高斯分布生成,要求出分布的参数 $ \mu_1 $ 、$ \sigma_1 $和$ \mu_2 $、 $ \sigma_2 $。为了方便,记为 $ \theta_1$和$ \theta_2 $。

0fdc32c415cdc1f1a7eb305f2a108558.md.png

这很简单,对每个类做最大似然估计,$ \mu_1 $ 和 $ \sigma_1 $就是第一类数据的均值、方差。这样高斯模型就直接能求出来。

66818371a52a889e17bcb64f7900983a.md.png

一维无监督

但是,如果现在数据换成这样:

0fbba7c078caeff389053262cfb73746.md.png

并且告诉你,每个数据点,不是由一个高斯分布导出来,而是由K个高斯分布,以一定的权重 $ p_ik $ 共同影响生成
那么要怎么估计这个K个高斯分布的参数呢?

为了解决这个问题,有了GMM,高斯混合模型

GMM的思路

隐变量:假设一个点属于某个类的概率

还是考虑上面一维数据的例子,已知K=2,即GMM是两个高斯的混合。那GMM是如何推导的呢?

从上面一维的有监督例子可以知道,如果我们知道了每个数据点$x_i$的标签,那我们可以很容易的获得高斯参数
难就难在,我们并不知道数据点的标签。那我们的思路就是,构造一个隐变量$Z_n*k$,用来假设数据$x_i$从第k个高斯分布导出的概率。

我们先选一个cluster,作为生成点x的类,再按照这个类的高斯参数,去计算生成数据点x的概率。

(这里要注意和K-means等区别,GMM认为,每个样本点是以一定的概率从一个分布中导出,而不是K-means的非对即错,GMM是Soft-Cluster 而 K-means是Hard-Cluster)

这样一来
=> 有了数据的隐变量Z,能推出高斯的参数
=> 有了参数,模型就确定了
=> 就可以重新计算每个数据点对于每个模型的分布情况
=> 就能更新Z

GMM的迭代:EM算法

考虑刚才的问题:对下图做二类的高斯估计

0fbba7c078caeff389053262cfb73746.md.png

Step1: E步

首先,GMM随机的挑两个高斯分布,不妨假设如下图

95f8b09809a0cf79693b91b742a9a914.md.png

我们假设这个分布是准确的,那我们就可以对这些没有标签的数据点做一个
二分类的判别(概率的判别)!!

所以,我们把这些点做一个分类

8562c7a57880f70b53fbaa249ad69710.md.png

这里需要强调的是GMM做出的判别,是以概率的形式表现的

从图中每个点,对两个高斯分布都有一个可能的概率。
如下表

数据点index 0 1 2 3 4
0.9 0.8 0.7 0.51 0.2
0.1 0.2 0.3 0.49 0.8

Step2: M步

通过这个分布的权重,重新 加权 算两个高斯分布的参数 $ \theta_1$和$ \theta_2 $。

然后更新后的高斯分布如图所示:

66818371a52a889e17bcb64f7900983a.md.png

(图是示意图,数据不太准,示意即可)

迭代

有了新的分布,我们就可以重新计算每个数据点的分类概率,做判别。
再更新参数… 反复迭代直到稳定。

从这个步骤就能看出,其实GMM的估计过程和K-means是非常类似的,都是两步:

  • 第一步:随机的把参数值固定(GMM固定了$ \mu $ 、$ \sigma $,K-means则是选了一个中心)
  • 第二步:把每个数据放到对应的类别里面,去更新参数值。

而不同在于,GMM考虑的是点属于某个分布的概率,而K-means直接把点划入一个类中。

GMM、EM算法的理论支持

实现GMM的公式推导

假设一个数据集X,服从K个高斯混合模型分布。 K是类别

第k个cluster表示为$p(x_i;\theta_k)$,p服从高斯分布,这是GMM的基本假设。

对数据$x_i$,设他的隐变量是$z_i$
$z_i$是一个1*k的向量,他的第k列表示$x_i$属于第k个cluster的概率,或者也理解为,$x_i$按照$z_i$的权重,从k个cluster派生而成。

所以对数据$x_i$,我们把所有的K个模型线性加成在一起,就组成了GMM的概率密度函数。

$ p(x) = \sum_{k=1}^{K}z_k \cdot p (x|\theta_k) $

收敛性的证明和分析

回到最初的思路,寻找一个最好的函数来逼近目标函数,然后找函数的最大值来更新参数:

E-step: 根据当前的参数,找到一个隐变量;
M-step: 对于当前找到隐变量,求函数取最大值时的参数值。

很重要的一点是,按照这个方法,GMM是否一定能够收敛,是否收敛到最优解?

EM算法的两个步骤可以用下图表示

4834a0eb2e68f297745c0f09f78514ee.md.png

那么当然,也有可能收敛到局部

8e2b8f03f4fb6f18560fba1ab6883183.md.png

CATALOG
  1. 1. 引言
    1. 1.1. 一维二分类的有监督例子
    2. 1.2. 一维无监督
      1. 1.2.1. 为了解决这个问题,有了GMM,高斯混合模型
  2. 2. GMM的思路
    1. 2.1. 隐变量:假设一个点属于某个类的概率
      1. 2.1.1. (这里要注意和K-means等区别,GMM认为,每个样本点是以一定的概率从一个分布中导出,而不是K-means的非对即错,GMM是Soft-Cluster 而 K-means是Hard-Cluster)
    2. 2.2. GMM的迭代:EM算法
      1. 2.2.1. Step1: E步
        1. 2.2.1.1. 这里需要强调的是GMM做出的判别,是以概率的形式表现的
      2. 2.2.2. Step2: M步
      3. 2.2.3. 迭代
        1. 2.2.3.1. 从这个步骤就能看出,其实GMM的估计过程和K-means是非常类似的,都是两步:
  3. 3. GMM、EM算法的理论支持
    1. 3.1. 实现GMM的公式推导
    2. 3.2. 收敛性的证明和分析