现在的位置: 首页 > 数据库 > 正文

高斯混合模型(GMM)及其EM算法的理解

2020年02月12日 数据库 ⁄ 共 10657字 ⁄ 字号 评论关闭

一个例子

高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一类分布但参数不一样,或者是不同类型的分布,比如正态分布和伯努利分布)。

如图1,图中的点在我们看来明显分成两个聚类。这两个聚类中的点分别通过两个不同的正态分布随机生成而来。但是如果没有GMM,那么只能用一个的二维高斯分布来描述图1中的数据。图1中的椭圆即为二倍标准差的正态分布椭圆。这显然不太合理,毕竟肉眼一看就觉得应该把它们分成两类。

图1

这时候就可以使用GMM了!如图2,数据在平面上的空间分布和图1一样,这时使用两个二维高斯分布来描述图2中的数据,分别记为N(μ1,Σ1)mathcal{N}(boldsymbol{mu}_1, boldsymbol{Sigma}_1)N(μ1​,Σ1​)和N(μ2,Σ2)mathcal{N}(boldsymbol{mu}_2, boldsymbol{Sigma}_2)N(μ2​,Σ2​). 图中的两个椭圆分别是这两个高斯分布的二倍标准差椭圆。可以看到使用两个二维高斯分布来描述图中的数据显然更合理。实际上图中的两个聚类的中的点是通过两个不同的正态分布随机生成而来。如果将两个二维高斯分布N(μ1,Σ1)mathcal{N}(boldsymbol{mu_1}, boldsymbol{Sigma}_1)N(μ1​,Σ1​)和N(μ2,Σ2)mathcal{N}(boldsymbol{mu}_2, boldsymbol{Sigma}_2)N(μ2​,Σ2​)合成一个二维的分布,那么就可以用合成后的分布来描述图2中的所有点。最直观的方法就是对这两个二维高斯分布做线性组合,用线性组合后的分布来描述整个集合中的数据。这就是高斯混合模型(GMM)。

图2

高斯混合模型(GMM)

设有随机变量Xboldsymbol{X}X,则混合高斯模型可以用下式表示:p(x)=∑k=1KπkN(x∣μk,Σk)p(boldsymbol{x}) = sum_{k=1}^Kpi_k mathcal{N}(boldsymbol{x}|boldsymbol{mu}_k, boldsymbol{Sigma}_k)p(x)=k=1∑K​πk​N(x∣μk​,Σk​)

其中N(x∣μk,Σk)mathcal{N}(boldsymbol{x}|boldsymbol{mu}_k, boldsymbol{Sigma}_k)N(x∣μk​,Σk​)称为混合模型中的第kkk个分量(component)。如前面图2中的例子,有两个聚类,可以用两个二维高斯分布来表示,那么分量数K=2K = 2K=2. πkpi_kπk​是混合系数(mixture coefficient),且满足:∑k=1Kπk=1sum_{k=1}^Kpi_k = 1k=1∑K​πk​=10≤πk≤10 leq pi_k leq 10≤πk​≤1

实际上,可以认为πkpi_kπk​就是每个分量N(x∣μk,Σk)mathcal{N}(boldsymbol{x}|boldsymbol{mu}_k, boldsymbol{Sigma}_k)N(x∣μk​,Σk​)的权重。

GMM的应用

GMM常用于聚类。如果要从 GMM 的分布中随机地取一个点的话,实际上可以分为两步:首先随机地在这 K 个 Component 之中选一个,每个 Component 被选中的概率实际上就是它的系数πkpi_kπk​ ,选中 Component 之后,再单独地考虑从这个 Component 的分布中选取一个点就可以了──这里已经回到了普通的 Gaussian 分布,转化为已知的问题。

将GMM用于聚类时,假设数据服从混合高斯分布(Mixture Gaussian Distribution),那么只要根据数据推出 GMM 的概率分布来就可以了;然后 GMM 的 K 个 Component 实际上对应KKK个 cluster 。根据数据来推算概率密度通常被称作 density estimation 。特别地,当我已知(或假定)概率密度函数的形式,而要估计其中的参数的过程被称作『参数估计』。

例如图2的例子,很明显有两个聚类,可以定义K=2K=2K=2. 那么对应的GMM形式如下:p(x)=π1N(x∣μ1,Σ1)+π2N(x∣μ2,Σ2)p(boldsymbol{x}) =pi_1 mathcal{N}(boldsymbol{x}|boldsymbol{mu}_1, boldsymbol{Sigma}_1) + pi_2 mathcal{N}(boldsymbol{x}|boldsymbol{mu}_2, boldsymbol{Sigma}_2)p(x)=π1​N(x∣μ1​,Σ1​)+π2​N(x∣μ2​,Σ2​)

上式中未知的参数有六个:(π1,μ1,Σ1;π2,μ2,Σ2)(pi_1, boldsymbol{mu}_1, boldsymbol{Sigma}_1; pi_2, boldsymbol{mu}_2, boldsymbol{Sigma}_2)(π1​,μ1​,Σ1​;π2​,μ2​,Σ2​). 之前提到GMM聚类时分为两步,第一步是随机地在这KKK个分量中选一个,每个分量被选中的概率即为混合系数πkpi_kπk​. 可以设定π1=π2=0.5pi_1 = pi_2 = 0.5π1​=π2​=0.5,表示每个分量被选中的概率是0.5,即从中抽出一个点,这个点属于第一类的概率和第二类的概率各占一半。但实际应用中事先指定πkpi_kπk​的值是很笨的做法,当问题一般化后,会出现一个问题:当从图2中的集合随机选取一个点,怎么知道这个点是来自N(x∣μ1,Σ1)N(boldsymbol{x}|boldsymbol{mu}_1, boldsymbol{Sigma}_1)N(x∣μ1​,Σ1​)还是N(x∣μ2,Σ2)N(boldsymbol{x}|boldsymbol{mu}_2, boldsymbol{Sigma}_2)N(x∣μ2​,Σ2​)呢?换言之怎么根据数据自动确定π1pi_1π1​和π2pi_2π2​的值?这就是GMM参数估计的问题。要解决这个问题,可以使用EM算法。通过EM算法,我们可以迭代计算出GMM中的参数:(πk,xk,Σk)(pi_k, boldsymbol{x}_k, boldsymbol{Sigma}_k)(πk​,xk​,Σk​).

GMM参数估计过程

GMM的贝叶斯理解

在介绍GMM参数估计之前,先改写GMM的形式,改写之后的GMM模型可以方便地使用EM估计参数。GMM的原始形式如下:

(1)p(x)=∑k=1KπkN(x∣μk,Σk)p(boldsymbol{x}) = sum_{k=1}^Kpi_k mathcal{N}(boldsymbol{x}|boldsymbol{mu}_k, boldsymbol{Sigma}_k) tag{1}p(x)=k=1∑K​πk​N(x∣μk​,Σk​)(1)

前面提到πkpi_kπk​可以看成是第kkk类被选中的概率。我们引入一个新的KKK维随机变量zboldsymbol{z}z. zk(1≤k≤K)z_k (1 leq k leq K)zk​(1≤k≤K)只能取0或1两个值;zk=1z_k = 1zk​=1表示第kkk类被选中的概率,即:p(zk=1)=πkp(z_k = 1) = pi_kp(zk​=1)=πk​;如果zk=0z_k = 0zk​=0表示第kkk类没有被选中的概率。更数学化一点,zkz_kzk​要满足以下两个条件:zk∈{0,1}z_k in {0,1}zk​∈{0,1}∑Kzk=1sum_K z_k = 1K∑​zk​=1

例如图2中的例子,有两类,则zboldsymbol{z}z的维数是2. 如果从第一类中取出一个点,则z=(1,0)boldsymbol{z} = (1, 0)z=(1,0);,如果从第二类中取出一个点,则z=(0,1)boldsymbol{z} = (0, 1)z=(0,1).

zk=1z_k=1zk​=1的概率就是πkpi_kπk​,假设zkz_kzk​之间是独立同分布的(iid),我们可以写出zboldsymbol{z}z的联合概率分布形式,就是连乘:

(2)p(z)=p(z1)p(z2)...p(zK)=∏k=1Kπkzkp(boldsymbol{z}) = p(z_1) p(z_2)...p(z_K) = prod_{k=1}^K pi_k^{z_k} tag{2}p(z)=p(z1​)p(z2​)...p(zK​)=k=1∏K​πkzk​​(2)

因为zkz_kzk​只能取0或1,且zboldsymbol{z}z中只能有一个zkz_kzk​为1而其它zj(j≠k)z_j (jneq k)zj​(j̸​=k)全为0,所以上式是成立的。

图2中的数据可以分为两类,显然,每一類中的数据都是服从正态分布的。这个叙述可以用条件概率来表示:p(x∣zk=1)=N(x∣μk,Σk)p(boldsymbol{x}|z_k = 1) = mathcal{N}(boldsymbol{x}|boldsymbol{mu}_k, boldsymbol{Sigma}_k)p(x∣zk​=1)=N(x∣μk​,Σk​)即第kkk类中的数据服从正态分布。进而上式有可以写成如下形式:(3)p(x∣z)=∏k=1KN(x∣μk,Σk)zkp(boldsymbol{x}| boldsymbol{z}) = prod_{k=1}^K mathcal{N}(boldsymbol{x}|boldsymbol{mu}_k, boldsymbol{Sigma}_k)^{z_k} tag{3}p(x∣z)=k=1∏K​N(x∣μk​,Σk​)zk​(3)

上面分别给出了p(z)p(boldsymbol{z})p(z)和p(x∣z)p(boldsymbol{x}| boldsymbol{z})p(x∣z)的形式,根据条件概率公式,可以求出p(x)p(boldsymbol{x})p(x)的形式:

(4)p(x)=∑zp(z)p(x∣z)=∑z(∏k=1KπkzkN(x∣μk,Σk)zk)=∑k=1KπkN(x∣μk,Σk)begin{aligned}p(boldsymbol{x}) &= sum_{boldsymbol{z}} p(boldsymbol{z}) p(boldsymbol{x}| boldsymbol{z}) \&= sum_{boldsymbol{z}} left(prod_{k=1}^K pi_k^{z_k} mathcal{N}(boldsymbol{x}|boldsymbol{mu}_k, boldsymbol{Sigma}_k)^{z_k} right ) \&= sum_{k=1}^K pi_k mathcal{N}(boldsymbol{x}|boldsymbol{mu}_k, boldsymbol{Sigma}_k) end{aligned} tag{4}p(x)​=z∑​p(z)p(x∣z)=z∑​(k=1∏K​πkzk​​N(x∣μk​,Σk​)zk​)=k=1∑K​πk​N(x∣μk​,Σk​)​(4)

(注:上式第二个等号,对zboldsymbol{z}z求和,实际上就是∑k=1Ksum_{k=1}^K∑k=1K​。又因为对某个kkk,只要i≠ki ne ki̸​=k,则有zi=0z_i = 0zi​=0,所以zk=0z_k=0zk​=0的项为1,可省略,最终得到第三个等号)

可以看到GMM模型的(1)式与(4)式有一样的形式,且(4)式中引入了一个新的变量zboldsymbol{z}z,通常称为隐含变量(latent variable)。对于图2中的数据,『隐含』的意义是:我们知道数据可以分成两类,但是随机抽取一个数据点,我们不知道这个数据点属于第一类还是第二类,它的归属我们观察不到,因此引入一个隐含变量zboldsymbol{z}z来描述这个现象。

注意到在贝叶斯的思想下,p(z)p(boldsymbol{z})p(z)是先验概率, p(x∣z)p(boldsymbol{x}| boldsymbol{z})p(x∣z)是似然概率,很自然我们会想到求出后验概率p(z∣x)p(boldsymbol{z}| boldsymbol{x})p(z∣x):(5)γ(zk)=p(zk=1∣x)=p(zk=1)p(x∣zk=1)p(x,zk=1)=p(zk=1)p(x∣zk=1)∑j=1Kp(zj=1)p(x∣zj=1)=πkN(x∣μk,Σk)∑j=1KπjN(x∣μj,Σj)begin{aligned}gamma(z_k) &= p(z_k = 1| boldsymbol{x}) \&= frac{p(z_k = 1) p(boldsymbol{x}|z_k = 1)}{p(boldsymbol{x}, z_k = 1)} \&= frac{p(z_k = 1) p(boldsymbol{x}|z_k = 1)}{sum_{j=1}^K p(z_j = 1) p(boldsymbol{x}|z_j = 1)} \&= frac{pi_k mathcal{N}(boldsymbol{x|boldsymbol{mu}_k, boldsymbol{Sigma}_k})}{sum_{j=1}^K pi_j mathcal{N}(boldsymbol{x|boldsymbol{mu}_j, boldsymbol{Sigma}_j})} end{aligned} tag{5}γ(zk​)​=p(zk​=1∣x)=p(x,zk​=1)p(zk​=1)p(x∣zk​=1)​=∑j=1K​p(zj​=1)p(x∣zj​=1)p(zk​=1)p(x∣zk​=1)​=∑j=1K​πj​N(x∣μj​,Σj​)πk​N(x∣μk​,Σk​)​​(5)

(第一个等号,全概率公式)(最后一个等号,结合(3)(4))

上式中我们定义符号γ(zk)gamma(z_k)γ(zk​)来表示来表示第kkk个分量的后验概率。在贝叶斯的观点下,πkpi_kπk​可视为zk=1z_k=1zk​=1的先验概率。

上述内容改写了GMM的形式,并引入了隐含变量zboldsymbol{z}z和已知x{boldsymbol{x}}x后的的后验概率γ(zk)gamma(z_k)γ(zk​),这样做是为了方便使用EM算法来估计GMM的参数。

EM算法估计GMM参数

EM算法(Expectation-Maximization algorithm)分两步,第一步先求出要估计参数的粗略值,第二步使用第一步的值最大化似然函数。因此要先求出GMM的似然函数。

假设x={x1,x2,...,xN}boldsymbol{x} = {boldsymbol{x}_1, boldsymbol{x}_2, ..., boldsymbol{x}_N}x={x1​,x2​,...,xN​},对于图2,xboldsymbol{x}x是图中所有点(每个点有在二维平面上有两个坐标,是二维向量,因此x1,x2boldsymbol{x}_1, boldsymbol{x}_2x1​,x2​等都用粗体表示)。GMM的概率模型如(1)式所示。GMM模型中有三个参数需要估计,分别是πboldsymbol{pi}π,μboldsymbol{mu}μ和Σboldsymbol{Sigma}Σ. 将(1)式稍微改写一下:(6)p(x∣π,μ,Σ)=∑k=1KπkN(x∣μk,Σk)p(boldsymbol{x}|boldsymbol{pi}, boldsymbol{mu}, boldsymbol{Sigma}) = sum_{k=1}^Kpi_k mathcal{N}(boldsymbol{x}|boldsymbol{mu}_k, boldsymbol{Sigma}_k) tag{6}p(x∣π,μ,Σ)=k=1∑K​πk​N(x∣μk​,Σk​)(6)

为了估计这三个参数,需要分别求解出这三个参数的最大似然函数。先求解μkmu_kμk​的最大似然函数。对(6)式取对数后再对μkboldsymbol{mu_k}μk​求导并令导数为0即得到最大似然函数。(7)0=−∑n=1NπkN(xn∣μk,Σk)∑jπjN(xn∣μj,Σj)Σk(xn−μk)0 = -sum_{n=1}^N frac{pi_k mathcal{N}(boldsymbol{x}_n | boldsymbol{mu}_k, boldsymbol{Sigma}_k)}{sum_j pi_j mathcal{N}(boldsymbol{x}_n|boldsymbol{mu}_j, boldsymbol{Sigma}_j)} boldsymbol{Sigma}_k (boldsymbol{x}_n - boldsymbol{mu}_k) tag{7}0=−n=1∑N​∑j​πj​N(xn​∣μj​,Σj​)πk​N(xn​∣μk​,Σk​)​Σk​(xn​−μk​)(7)

注意到上式中分数的一项的形式正好是(5)式后验概率的形式。两边同乘Σk−1boldsymbol{Sigma}_k^{-1}Σk−1​,重新整理可以得到:(8)μk=1Nk∑n=1Nγ(znk)xnboldsymbol{mu}_k = frac{1}{N_k}sum_{n=1}^N gamma(z_{nk}) boldsymbol{x}_n tag{8}μk​=Nk​1​n=1∑N​γ(znk​)xn​(8)

其中:(9)Nk=∑n=1Nγ(znk)N_k = sum_{n=1}^N gamma(z_{nk}) tag{9}Nk​=n=1∑N​γ(znk​)(9)

(8)式和(9)式中,NNN表示点的数量。γ(znk)gamma(z_{nk})γ(znk​)表示点nnn(xnboldsymbol{x}_nxn​)属于聚类kkk的后验概率。则NkN_kNk​可以表示属于第kkk个聚类的点的数量。那么μkboldsymbol{mu}_kμk​表示所有点的加权平均,每个点的权值是∑n=1Nγ(znk)sum_{n=1}^N gamma(z_{nk})∑n=1N​γ(znk​),跟第kkk个聚类有关。

同理求Σkboldsymbol{Sigma}_kΣk​的最大似然函数,可以得到:(10)Σk=1Nk∑n=1Nγ(znk)(xn−μk)(xn−μk)Tboldsymbol{Sigma}_k = frac{1}{N_k} sum_{n=1}^N gamma(z_{nk}) (x_n - boldsymbol{mu}_k)(x_n - boldsymbol{mu}_k)^T tag{10}Σk​=Nk​1​n=1∑N​γ(znk​)(xn​−μk​)(xn​−μk​)T(10)

最后剩下πkpi_kπk​的最大似然函数。注意到πkpi_kπk​有限制条件∑k=1Kπk=1sum_{k=1}^Kpi_k = 1∑k=1K​πk​=1,因此我们需要加入拉格朗日算子:ln⁡p(x∣π,μ,Σ)+λ(∑k=1Kπk−1)ln p(boldsymbol{x}|boldsymbol{pi}, boldsymbol{mu}, boldsymbol{Sigma}) + lambda(sum_{k=1}^K pi_k -1)lnp(x∣π,μ,Σ)+λ(k=1∑K​πk​−1)

求上式关于πkpi_kπk​的最大似然函数,得到:(11)0=∑n=1NN(xn∣μk,Σk)∑jπjN(xn∣μj,Σj)+λ0 = sum_{n=1}^N frac{mathcal{N}(boldsymbol{x}_n | boldsymbol{mu}_k, boldsymbol{Sigma}_k)}{sum_j pi_j mathcal{N}(boldsymbol{x}_n|boldsymbol{mu}_j, boldsymbol{Sigma}_j)} + lambda tag{11}0=n=1∑N​∑j​πj​N(xn​∣μj​,Σj​)N(xn​∣μk​,Σk​)​+λ(11)

上式两边同乘πkpi_kπk​,我们可以做如下推导:

(11.1)0=∑n=1NπkN(xn∣μk,Σk)∑jπjN(xn∣μj,Σj)+λπk0 = sum_{n=1}^N frac{pi_k mathcal{N}(boldsymbol{x}_n | boldsymbol{mu}_k, boldsymbol{Sigma}_k)}{sum_j pi_j mathcal{N}(boldsymbol{x}_n|boldsymbol{mu}_j, boldsymbol{Sigma}_j)} + lambda pi_k tag{11.1}0=n=1∑N​∑j​πj​N(xn​∣μj​,Σj​)πk​N(xn​∣μk​,Σk​)​+λπk​(11.1)

结合公式(5)、(9),可以将上式改写成:

(11.2)0=Nk+λπk0 = N_k + lambda pi_k tag{11.2}0=Nk​+λπk​(11.2)

注意到∑k=1Kπk=1sum_{k=1}^K pi_k = 1∑k=1K​πk​=1,上式两边同时对kkk求和。此外NkN_kNk​表示属于第个聚类的点的数量(公式(9))。对Nk,N_k,Nk​,从k=1k=1k=1到k=Kk=Kk=K求和后,就是所有点的数量NNN:

(11.3)0=∑k=1KNk+λ∑k=1Kπk0 = sum_{k=1}^K N_k + lambda sum_{k=1}^K pi_k tag{11.3}0=k=1∑K​Nk​+λk=1∑K​πk​(11.3)

(11.4)0=N+λ0 = N + lambda tag{11.4}0=N+λ(11.4)

从而可得到λ=−Nlambda = -Nλ=−N,带入(11.3),进而可以得到πkpi_kπk​更简洁的表达式:(12)πk=NkNpi_k = frac{N_k}{N} tag{12}πk​=NNk​​(12)

EM算法估计GMM参数即最大化(8),(10)和(12)。需要用到(5),(8),(10)和(12)四个公式。我们先指定πboldsymbol{pi}π,μboldsymbol{mu}μ和Σboldsymbol{Sigma}Σ的初始值,带入(5)中计算出γ(znk)gamma(z_{nk})γ(znk​),然后再将γ(znk)gamma(z_{nk})γ(znk​)带入(8),(10)和(12),求得πkpi_kπk​,μkboldsymbol{mu}_kμk​和Σkboldsymbol{Sigma}_kΣk​;接着用求得的πkpi_kπk​,μkboldsymbol{mu}_kμk​和Σkboldsymbol{Sigma}_kΣk​再带入(5)得到新的γ(znk)gamma(z_{nk})γ(znk​),再将更新后的γ(znk)gamma(z_{nk})γ(znk​)带入(8),(10)和(12),如此往复,直到算法收敛。

EM算法

    定义分量数目KKK,对每个分量kkk设置πkpi_kπk​,μkboldsymbol{mu}_kμk​和Σkboldsymbol{Sigma}_kΣk​的初始值,然后计算(6)式的对数似然函数。E step根据当前的πkpi_kπk​、μkboldsymbol{mu}_kμk​、Σkboldsymbol{Sigma}_kΣk​计算后验概率γ(znk)gamma(z_{nk})γ(znk​)γ(znk)=πkN(xn∣μn,Σn)∑j=1KπjN(xn∣μj,Σj)gamma(z_{nk}) = frac{pi_kmathcal{N}(boldsymbol{x}_n| boldsymbol{mu}_n, boldsymbol{Sigma}_n)}{sum_{j=1}^K pi_j mathcal{N}(boldsymbol{x}_n| boldsymbol{mu}_j, boldsymbol{Sigma}_j)}γ(znk​)=∑j=1K​πj​N(xn​∣μj​,Σj​)πk​N(xn​∣μn​,Σn​)​M step根据E step中计算的γ(znk)gamma(z_{nk})γ(znk​)再计算新的πkpi_kπk​、μkboldsymbol{mu}_kμk​、Σkboldsymbol{Sigma}_kΣk​KaTeX parse error: No such environment: split at position 8: begin{̲s̲p̲l̲i̲t̲}̲boldsymbol{m…其中:Nk=∑n=1Nγ(znk)N_k = sum_{n=1}^N gamma(z_{nk})Nk​=n=1∑N​γ(znk​)计算(6)式的对数似然函数ln⁡p(x∣π,μ,Σ)=∑n=1Nln⁡{∑k=1KπkN(xk∣μk,Σk)}ln p(boldsymbol{x}|boldsymbol{pi}, boldsymbol{mu}, boldsymbol{Sigma}) = sum_{n=1}^N ln left{sum_{k=1}^K pi_k mathcal{N}(boldsymbol{x}_k| boldsymbol{mu}_k, boldsymbol{Sigma}_k)right}lnp(x∣π,μ,Σ)=n=1∑N​ln{k=1∑K​πk​N(xk​∣μk​,Σk​)}检查参数是否收敛或对数似然函数是否收敛,若不收敛,则返回第2步。

Reference

    漫谈 Clustering (3): Gaussian Mixture ModelDraw Gaussian distribution ellipsePang-Ning Tan 等, 数据挖掘导论(英文版), 机械工业出版社, 2010Christopher M. Bishop etc., Pattern Recognition and Machine Learning, Springer, 2006

以上就上有关高斯混合模型(GMM)及其EM算法的理解的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.