高斯混合模型是指随机变量x具有如下形式的分布(概率密度函数):
(公式1)
其中,参数 θ θ θ代表所有混合成分的参数(均值向量μ与协方差矩阵Σ)的集合:
(公式2)
每个混合成分的概率密度函数为:
(公式3)
k k k表示该高斯混合分布由 k k k个高斯混合成分组成。 α i \alpha_i αi为相应高斯混合成分的混合系数,由于高斯混合分布也是一个分布,所以有
(公式4)
即: ∑ i = 1 k α i = 1 ( 公 式 5 ) \sum_{i=1}^{k}\alpha_i=1 \quad (公式5) ∑i=1kαi=1(公式5)
高斯混合模型是聚类算法的一种。 k − m e a n s k-means k−means算法是确切给出每个样本被分配到某一个簇,称为硬分配;而高斯混合模型则是给出每个样本被分配到每个簇的概率,最后从中选取一个最大的概率对应的簇作为该样本被分配到的簇,称为软分配。
求解高斯混合分布的过程,也就是求解所有的模型参数 α i , μ i , Σ i \alpha_i,\mu_i,\Sigma_i αi,μi,Σi,此时已知样本集 D D D和预先设置的混合成分的个数 k k k(这种需要预先设置好的参数称为超参数)。
对模型参数进行参数估计,我们都会先想到极大似然估计(高斯( G a u s s Gauss Gauss)最早提出最大似然估计,并将其用于研究测量误差的分布。后来该方法被 F i s h e r Fisher Fisher总结应用于求参数估计,并命名为极大似然估计),于是,首先写出极大似然函数的对数似然函数:
(公式6)
若训练集 D = { x 1 , x 2 , . . . , x m } D=\{x_1,x_2,...,x_m\} D={x1,x2,...,xm}由上述过程生成,令随机变量 z j ∈ { 1 , 2 , ⋅ ⋅ ⋅ , k } z_j ∈ \{1,2,\cdot\cdot\cdot,k\} zj∈{1,2,⋅⋅⋅,k}表示生成样本 x j x_j xj的高斯混合成分的序号,其取值未知,显然, z j z_j zj的先验概率 P ( z j = i ) P(z_j = i) P(zj=i)对应于 α i ( i = 1 , 2 , ⋅ ⋅ ⋅ , k ) α_i(i=1,2,\cdot\cdot\cdot,k) αi(i=1,2,⋅⋅⋅,k).根据贝叶斯定理, z j z_j zj的后验概率对应于
(公式7)
在此解释一下这个公式。有些人可能在看西瓜书时疑惑于书中这个公式中一会儿用 p m p_m pm表示概率,一会儿用 p p p表示概率,其实用 p p p或者 p m p_m pm表示都可以,因为它们都是表示的随机变量或者条件随机变量的概率,是等价的。
在理想情况下,每个样本应该是只由一个混合成分生成,这个混合成分对应的也就是该样本被分配到的簇,即样本xj只由第i个混合成分生成,亦即 p ( z j = i ∣ x j ) = 1 p(z_j=i\mid x_j)=1 p(zj=i∣xj)=1,并且 p ( z n = i ∣ x n ) = 0 ( 当 n ≠ j 时 ) p(z_n=i\mid x_n)=0(当n\neq j时) p(zn=i∣xn)=0(当n=j时)。但是,由于我们的无知,我们预先并不知道这样的理想的高斯混合分布是怎么样的,所以我们只能根据已经观察到的数据集 D D D来获得每个样本由每个混合成分生成的概率,这个概率也就是这个公式所表达的值,所以这也是这个公式为什么是一个后验概率的表达式(已知样本 x j x_j xj的情况下,样本xj由第i个混合成分生成的概率),这也就相当于尽我们所能。如果用数学语言表达就是:记随机变量 h j i h_{ji} hji表示样本 x j x_j xj是否由第i个混合成分生成( h j i h_{ji} hji也就是EM算法中的隐变量),如果是,则 h j i h_{ji} hji记为1,否则 h j i h_{ji} hji记为0,根据这个定义我们知道,
h j 1 , h j 2 , h j 3 , ⋅ ⋅ ⋅ , h j k h_{j1},h_{j2},h_{j3},\cdot\cdot\cdot,h_{jk} hj1,hj2,hj3,⋅⋅⋅,hjk这 k k k个数中,只由一个数为1(说明 x j x_j xj只由唯一的一个混合成分生成),其余所有数都为0,那么随机变量 h j i h_{ji} hji的分布列是
$h_{ji}(i=1,2,\cdot\cdot\cdot,k)$ | 0 | 1 |
---|---|---|
概率 | $p(h_{ji}=0\mid x_j)$ | $p(h_{ji}=1\mid x_j)$ |
通过以上过程,我们就完成了EM算法中的E步(即明确隐变量和求解隐变量的期望),也得到了极大似然函数的对数似然函数.接下来执行M步.
α i , μ i , Σ i \alpha_i,\mu_i,\Sigma_i αi,μi,Σi作为自变量变化的过程中,对数似然函数的极大值,所以需要将对数似然函数对 α i , μ i , Σ i \alpha_i,\mu_i,\Sigma_i αi,μi,Σi分别求偏导,接下来以对 μ i \mu_i μi求偏导详细说明公式推导过程.
先对 μ i \mu_i μi求偏导,这里会涉及到函数链式求导法则和列向量的实数函数对该列向量求导,后者会在后面加以说明。
其中
这一步用到了以下一个列向量的实数函数对该列向量求导的公式:
若 A A A是 n n n阶方阵, x x x是 n n n维列向量,则
∂ ( x T A x ) ∂ x = ( A + A T ) x \frac{\partial (x^TAx)}{\partial x}=(A+A^T)x ∂x∂(xTAx)=(A+AT)x,
特殊地,当 A A A是 n n n阶对称方阵时, A = A T A=A^T A=AT,即
∂ ( x T A x ) ∂ x = 2 A x \frac{\partial (x^TAx)}{\partial x}=2Ax ∂x∂(xTAx)=2Ax
而这里的 Σ i − 1 \Sigma_{i}^{-1} Σi−1恰好是m阶对称方阵。
接下来,因为 Σ i − 1 \Sigma_{i}^{-1} Σi−1是第 i i i个混合成分的协方差矩阵的逆,所以它一定是非奇异矩阵,对于非奇异矩阵,有以下定理:
如果 n n n阶方阵 A A A是可逆矩阵, x x x是 n n n维列向量,那么方程 A x = 0 Ax=0 Ax=0有且只有平凡解(零解),即 x = 0 x=0 x=0。
令,
则 (公式9)
记,将其带入公式9得:
(公式10)
类似地,可以得到:
(公式11)
对于求解混合系数αi,由于在极大化对数似然函数的情况下,还需要保证
,
所以这是一个含等式和不等式约束的优化问题(其实这里的对数似然函数 L L ( D ) LL(D) LL(D)是相对于 α i \alpha_i αi的凹函数,对它求极大就相当于对 L L ( D ) LL(D) LL(D)求极小,也就是变成了一个标准的凸优化问题),为了简单起见,这里只需要先考虑等式约束,如果在等式约束条件下就能够取得 L L ( D ) LL(D) LL(D)的极小值并且同时能满足不等式约束,那么等式约束条件下的最优解就是这个约束条件下的最优解。所以接下来构造拉格朗日公式:
(公式12)
对其求 α i \alpha_i αi的偏导并令其偏导为0:
(公式13)
对(公式13)左右两边同时乘以 α i \alpha_i αi,得到:
(公式14)
对 (公式14)左右两边同时对 i = 1 , 2 , 3 , ⋅ ⋅ ⋅ , k i=1,2,3,\cdot\cdot\cdot,k i=1,2,3,⋅⋅⋅,k求和,得到:
(公式15)
其中 ∑ i = 1 k ∑ j = 1 m γ j i \sum_{i=1}^{k}\sum_{j=1}^{m}\gamma_{ji} ∑i=1k∑j=1mγji代表的是所有的样本由所有的样本生成的后验概率之和,这个值一定是样本的个数,也就是 m m m。
由(公式15)可以得到 λ = − m \lambda=-m λ=−m,再结合(公式14),可以得到:
α i = 1 m ⋅ ∑ j = 1 m γ j i \alpha_i=\frac{1}{m}\cdot\sum_{j=1}^{m}\gamma_{ji} αi=m1⋅j=1∑mγji
(公式16)说明每个高斯成分的混合系数等于所有属于该混合成分的样本的平均后验概率。
综上,可以获得高斯混合模型的EM算法求解:
先给定混合成分个数 k k k,再初始化高斯混合模型的模型参数( α i , μ i , Σ i \alpha_i,\mu_i,\Sigma_i αi,μi,Σi,其中 i = 1 , 2 , 3 , ⋅ ⋅ ⋅ , k i=1,2,3,\cdot\cdot\cdot,k i=1,2,3,⋅⋅⋅,k)。再执行E步:计算 γ j i \gamma_{ji} γji,接下来根据(公式10)、(公式11)和(公式16)来更新计算 α i , μ i , Σ i \alpha_i,\mu_i,\Sigma_i αi,μi,Σi,循环执行E步和M步,直至算法满足停止条件(例如已达到最大迭代轮数,或者对数似然函数增长很少或者不再增长等等)
求得所有参数之后,再根据
λ j = arg max i ∈ { 1 , 2 , ⋅ ⋅ ⋅ , k } γ j i \lambda_j=\mathop{\arg\max}_{i\in \{1,2,\cdot\cdot\cdot,k\}}\gamma_{ji} λj=argmaxi∈{1,2,⋅⋅⋅,k}γji
求得 x j x_j xj所分配到的簇,输出即可。