【1024特辑 | 机器学习-无监督学习】EM算法

在这里插入图片描述
在这里插入图片描述

【作者主页】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(yX,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 z1,,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(xz)p(z)

在这里插入图片描述

图1 高斯混合模型的贝叶斯网络

  按照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=1NP(xiϕ,μ,Σ)=i=1NlogP(xiϕ,μ,Σ)=

上一篇:【将python程序打包成可执行exe文件】将python GUI编写的点名系统打包成exe-怎样打包


下一篇:如何全方位应对服务可用性的挑战