【作者主页】Francek Chen
【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,依赖于强大的开源库如Scikit-learn、TensorFlow和PyTorch。本专栏介绍机器学习的相关算法以及基于Python的算法实现。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/Python_machine_learning。
文章目录
- 一、高斯混合模型的EM算法
- 二、动手求解GMM拟合数据分布
- 三、一般情况下的EM算法
- 四、EM算法的收敛性
本文我们继续介绍概率相关模型的算法。在前面的文章中,我们已经讲解了贝叶斯网络与最大似然估计(MLE)。设数据集的样本为 x 1 , x 2 , ⋯ , x N \boldsymbol x_1,\boldsymbol x_2,\cdots,\boldsymbol x_N x1,x2,⋯,xN,标签为 y 1 , y 2 , ⋯ , y N y_1,y_2,\cdots,y_N y1,y2,⋯,yN,我们用 X \boldsymbol X X和 y \boldsymbol y y分别表示全体样本和全体标签。对于监督学习的任务,我们可以通过最大化对数似然 l ( w ) = log P ( y ∣ X , w ) l(\boldsymbol w)=\log P(\boldsymbol y|\boldsymbol X,\boldsymbol w) l(w)=logP(y∣X,w) 来求解模型的参数 w \boldsymbol w w。而对于无监督学习任务,我们要求解样本 X \boldsymbol X X的分布。这时,我们通常需要先假设数据服从某种分布,再求解这个分布的参数。例如假设数据呈现高斯分布 N ( μ , Σ ) \mathcal N(\boldsymbol\mu,\boldsymbol\Sigma) N(μ,Σ),然后可以通过MLE的方式来求得最佳的高斯分布参数 μ \boldsymbol\mu μ和 Σ \boldsymbol\Sigma Σ。
更进一步思考,真实世界的数据分布往往较为复杂,其背后往往具有一定的结构性,直接使用一个概率分布模型无法有效刻画数据分布。例如,我们可以假设数据服从高斯混合模型(Gaussian mixture model,GMM),即 N ( μ 1 , Σ 1 , ⋯ , μ k , Σ k ) \mathcal N(\boldsymbol\mu_1,\boldsymbol\Sigma_1,\cdots,\boldsymbol\mu_k,\boldsymbol\Sigma_k) N(μ1,Σ1,⋯,μk,Σk),该模型是由 k k k个相互独立的高斯分布 N i ( μ i , Σ i ) ( i = 1 , ⋯ , k ) \mathcal N_i(\boldsymbol\mu_i,\boldsymbol\Sigma_i)(i=1,\cdots,k) Ni(μi,Σi)(i=1,⋯,k) 组合而成的,数据集中的每个样本 x j \boldsymbol x_j xj都从其中的某个高斯分布采样得到。在现实生活中,符合GMM的数据集有很多。例如,我们统计了某学校中所有学生的身高。通常认为,人的身高是在某个均值附近的高斯分布,然而男生和女生身高的均值是不同的。因此,我们可以认为男生身高和女生身高分别服从不同的高斯分布,而总的数据集就符合GMM。
在GMM中,我们要求解的参数共有两种,一种是每个高斯分布的参数 μ i \boldsymbol\mu_i μi和 Σ i \boldsymbol\Sigma_i Σi,另一种是每个高斯分布在GMM中的占比。记 z ∈ 1 , ⋯ , k z\in 1,\cdots,k z∈1,⋯,k 是高斯分布的编号, z z z出现的次数越多,从分布 N ( μ z , Σ z ) \mathcal N(\boldsymbol\mu_z,\boldsymbol\Sigma_z) N(μz,Σz)采样的数据在数据集中的占比就越大。所以,后者相当于求解 z z z的多项分布 p ( z ) p(z) p(z)。
从贝叶斯网络的角度来看,上面的分析过程建立了如下图1所示的贝叶斯网络。其中, ϕ \boldsymbol\phi ϕ是多项分布 p ( z ) p(z) p(z)的参数, z z z取 1 , ⋯ , k 1,\cdots,k 1,⋯,k 的概率分别是 ϕ 1 , ⋯ , ϕ k \phi_1,\cdots,\phi_k ϕ1,⋯,ϕk。而对每个样本 x i \boldsymbol x_i xi,我们先从多项分布中采样 z i \boldsymbol z_i zi,确定样本属于哪个高斯分布,再从该高斯分布 N ( μ z i , Σ z i ) \mathcal N(\boldsymbol\mu_{z_i},\boldsymbol\Sigma_{z_i}) N(μzi,Σzi)中采样出样本 x i \boldsymbol x_i xi。于是,我们可以利用中间变量 z z z把 x \boldsymbol x x的分布拆分为 p ( x ) = p ( x ∣ z ) p ( z ) p(\boldsymbol x)=p(\boldsymbol x|z)p(z) p(x)=p(x∣z)p(z)。
按照MLE的思想,参数的似然就是在此参数条件下出现观测到的数据分布的概率,也即
L
(
ϕ
,
μ
,
Σ
)
=
P
(
X
∣
ϕ
,
μ
,
Σ
)
L(\boldsymbol\phi,\boldsymbol\mu,\boldsymbol\Sigma)=P(\boldsymbol X|\boldsymbol\phi,\boldsymbol\mu,\boldsymbol\Sigma)
L(ϕ,μ,Σ)=P(X∣ϕ,μ,Σ)。我们将似然取对数,得到
l
(
ϕ
,
μ
,
Σ
)
=
log
L
(
ϕ
,
μ
,
Σ
)
=
log
P
(
X
∣
ϕ
,
μ
,
Σ
)
=
log
∏
i
=
1
N
P
(
x
i
∣
ϕ
,
μ
,
Σ
)
=
∑
i
=
1
N
log
P
(
x
i
∣
ϕ
,
μ
,
Σ
)
=
∑
i
=
1
N
log
∑
j
=
1
k
P
(
x
i
∣
z
=
j
,
μ
j
,
Σ
j
)
P
(
z
=
j
∣
ϕ
j
)
=
∑
i
=
1
N
log
∑
j
=
1
k
N
(
x
i
∣
μ
j
,
Σ
j
)
ϕ
j
\begin{aligned} l(\boldsymbol\phi,\boldsymbol\mu,\boldsymbol\Sigma) &= \log L(\boldsymbol\phi,\boldsymbol\mu,\boldsymbol\Sigma) = \log P(\boldsymbol X|\boldsymbol\phi,\boldsymbol\mu,\boldsymbol\Sigma) \\ &= \log\prod_{i=1}^NP(\boldsymbol x_i|\boldsymbol\phi,\boldsymbol\mu,\boldsymbol\Sigma) \\ &= \sum_{i=1}^N\log P(\boldsymbol x_i|\boldsymbol\phi,\boldsymbol\mu,\boldsymbol\Sigma) \\ &= \sum_{i=1}^N\log\sum_{j=1}^kP(\boldsymbol x_i|z=j,\boldsymbol\mu_j,\boldsymbol\Sigma_j)P(z=j|\phi_j) \\ &= \sum_{i=1}^N\log\sum_{j=1}^k\mathcal N(\boldsymbol x_i|\boldsymbol\mu_j,\boldsymbol\Sigma_j)\phi_j \end{aligned}
l(ϕ,μ,Σ)=logL(ϕ,μ,Σ)=logP(X∣ϕ,μ,Σ)=logi=1∏NP(xi∣ϕ,μ,Σ)=i=1∑NlogP(xi∣ϕ,μ,Σ)=