1.多维高斯分布回顾
在上一篇文章中介绍了高斯混合模型的公式,但是在实际应用中每次迭代的公式又是如何出来的呢,抱着这个疑问,我也就写出了这篇博客,希望可以记录一下,如下所示,是多维高斯分布的分布公式:
N(X
∣μ
,Σ)=(2π)2D⋅∣Σ∣211⋅e−2(X
−μ
)T⋅∑−1⋅(X
−μ
)
2.极大似然估计
求解高斯混合模型的过程就是,就是求解所有模型参数的过程,也就是通过不断的迭代求取
πk,
μi,
σi2这三个参数,并且使其趋于稳定从而得到稳定后的模型分布参数。
对于混合模型进行参数估计,首先都会想到极大似然估计,于是我们首先使用极大似然估计来进行参数的估计,其推导公式也即如下所示:
P=i=1∏Np(xi
∣πk,μk)
,Σk)=i=1∏N⋅k=1∑KπkN(xi
∣μk
,Σk)=i=1∏N⋅k=1∑Kπk(2π)2D⋅∣Σk∣211⋅e−2(xi
−μk
)T⋅Σk−1⋅(Xi
−μk
)=k=1∑KπkN(x1
∣μk
,Σk)⋅k=1∑KπkN(x2
∣μk
,Σk)⋅⋅⋅⋅k=1∑KπkN(xN
∣μk
,Σk)
3.EM算法的E步
在理想情况下,每个样本应该只由一个混合成分生成,这个混合成分对应的就是被样本分配到的簇,这样样本
xi只由第
k个混合成分组成,也就是说
p(zi=k∣xi)=1,并且
p(zn=k∣xn)=0,此时
n=i,但是由于我们之前不知道这样的理想的高斯分布是怎样的,我们只能根据已经观察到的数据集,来获取每个样本由每个混合成分生成的概率,这个概率就是公式所表达的值,如下所示:
E(hik∣xi)=0⋅p(hik=0∣xi))+1⋅p(hik=1∣xi))=p(hik=1∣xi))=p(zi=k∣xi)=∑k=1Kπk⋅p(xi∣μk,Σk)πk⋅p(xi∣μk,Σk)
对上边的公式进行一下解释,
1.随机变量
hik表示样本
xi是否由第
k个混合成分生成
2.随机变量
hik也就是EM算法的隐变量
如果随机变量
hik表示样本
xi是否由第
k个混合成分生成,则
hik记为1,否则记为0。根据这个定义我们知道,
hi1,hi2,hi3,……,hiK,这K个数中,只有一个为1,说明
xi只由一个混合成分生成,其余所有数都为0,以下列出了其分布列:
hik |
0 |
1 |
概率 |
p(hik=0∣xi) |
p(hik=1∣xi) |
上边的公式就是根据隐变量的分布列,来求取其期望的公式。
4.EM算法的M步
EM算法的M步骤,就是对于先对数化似然函数,然后求取其极大值 ,对上式展开并且带入
N(xi
∣μk
,Σk)公式可得
lnP=ln(k=1∑KπkN(x1
∣μk
,Σk)⋅k=1∑KπkN(x2
∣μk
,Σk)⋅⋅⋅⋅k=1∑KπkN(xN
∣μk
,Σk))=ln(k=1∑KπkN(x1
∣μk
,Σk))+ln(k=1∑KπkN(x2
∣μk
,Σk))+⋅⋅⋅⋅+ln(k=1∑KπkN(xN
∣μk
,Σk))=i=1∑N⋅ln(k=1∑KπkN(xi
∣μk
,Σk))
根据之前所学的知识,因为我们要求的是
πk,
uk,
Σk,所以在在这一过程中,我们通常采用的方法是分别对其求偏导,并且使其为0,求得分别的在极大值时的取值。下面我将会以
μk的求取来进行一下演示:
但是在开始之前需要补充一些矩阵求偏导的公式:
1 .若A为n阶方阵,x是n维列向量,则有:
∂x∂(xTAx)=(A+AT)x
2 .特殊的,当A为n阶对称方阵时,则有
A=AT,上式可以简化为:
∂x∂(xTAx)=(A+AT)x=2Ax
补充完上述的方法之后,我们接下来就要对
lnP求
μk的偏导:
∂μk∂(lnP)=∂μk∂(∑i=1N⋅ln(∑k=1KπkN(xi
∣μk
,Σk)))=∂μk∑i=1N⋅∂(ln(∑k=1KπkN(xi
∣μk
,Σk)))=i=1∑N[∑k=1KπkN(xi
∣μk
,Σk)1⋅∂μk∂(∑k=1KπkN(xi
∣μk
,Σk))]=i=1∑N[∑k=1KπkN(xi
∣μk
,Σk)1⋅∂μk∂(π1N(xi
∣μ1
,Σ1)+π2N(xi
∣μ2
,Σ2)+……+πkN(xi
∣μk
,Σk)+……+πKN(xi
∣μK
,ΣK))]=i=1∑N[∑k=1KπkN(xi
∣μk
,Σk)1⋅∂μk∂(πkN(xi
∣μk
,Σk))]=i=1∑N[∑k=1KπkN(xi
∣μk
,Σk)πk⋅∂μk∂(N(xi
∣μk
,Σk))]
到这里之后我们需要将
N(xi
∣μk
,Σk))的具体公式带入计算,其结果及运算过程如下所示:
上式=i=1∑N⎣⎢⎢⎡∑k=1KπkN(xi
∣μk
,Σk)πk⋅∂μk∂((2π)2D⋅∣Σk∣211⋅e−2(xi
−μk
)T⋅Σk−1⋅(xi
−μk
))⎦⎥⎥⎤=i=1∑N⎣⎡∑k=1KπkN(xi
∣μk
,Σk)πk⋅(2π)2D⋅∣Σk∣211⋅∂μk∂(e−2(xi
−μk
)T⋅Σk−1⋅(xi
−μk
))⎦⎤=i=1∑N⎣⎡∑k=1KπkN(xi
∣μk
,Σk)πk⋅(2π)2D⋅∣Σk∣211⋅e−2(xi
−μk
)T⋅Σk−1⋅(xi
−μk
)⋅∂μk∂(−2(xi
−μk
)T⋅Σk−1⋅(xi
−μk
))⎦⎤
到了这里下一步的计算就需要用到我们在本节开头的地方补充的向量求偏导的方法:
上式=i=1∑N[∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)⋅(−21)⋅2⋅Σk−1(xi
−μk
)⋅∂μk∂(xi
−μk
)]=i=1∑N[∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)⋅(−21)⋅2⋅Σk−1(xi
−μk
)⋅(−1)]=i=1∑N[∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)⋅Σk−1(xi
−μk
)]=Σk−1⋅i=1∑N[∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)⋅(xi
−μk
)]⇓令上式=0
对于上边等式的求解,因为
Σk−1是第k个混合成分的协方差矩阵的逆,其一定为一个非奇异矩阵,又由线性代数知识,如果n阶方阵A为可逆矩阵,x为n维列向量,那么Ax=0有且仅有零解,即x=0。
对于我们的此处的计算,则会有如下等式:
Σk−1⋅i=1∑N[∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)⋅(xi
−μk
)]=0⇓令hik=∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)⇓简化为Σk−1⋅i=1∑N[hik⋅(xi
−μk
)]=0⇓解得μk
=∑i=1Nhik∑i=1Nhik⋅xi
⇓代入μk
=∑i=1N∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)∑i=1N∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)⋅xi
所以这就是我们最后需要证的结果:
μk
=∑i=1Nhik∑i=1Nhik⋅xi
=∑i=1N∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)∑i=1N∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)⋅xi
此处我只展示了
μk
的求解过程,对于
Σk的求解未展开,不过其计算原理一样,到最后其计算结果为:
Σk=∑i=1Nhik∑i=1Nhik(xi
−μk
)⋅(xi
−μk
)T=∑i=1N∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)∑i=1N∑k=1KπkN(xi
∣μk
,Σk)πk⋅N(xi
∣μk
,Σk)(xi
−μk
)⋅(xi
−μk
)T
5.心得
推导虽然不容易,但自己推导一遍还是方便理解的。加油~~