机器学习算法(八):EM算法

本文深入探讨了EM算法的原理及其在高斯混合聚类、PLSA算法等场景的应用。从极大似然估计出发,阐述了EM算法的迭代过程,包括E步和M步,并以高斯混合聚类为例展示了算法的具体实现。此外,文章还简要介绍了EM算法在自然语言处理中的应用,如PLSA算法,并详细解释了其E步和M步的计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EM(Expectation Maximization)算法

概率模型有时既含有观测变量,又含有隐变量或潜在变量。如果概率模型的变量都是观测变量,那么给定数据,可以直接用极大似然估计法,或贝叶斯估计法估计模型参数。但是,当模型含有隐变量时,就不能简单地使用这些估计方法。EM算法就是含有隐变量的概率模型参数的极大似然估计法,或极大后验概率估计法。

一般地,用Y表示观测随机变量的数据,Z表示隐随机变量的数据,θ表示模型参数。EM算法是一种迭代算法,每次迭代有两部分组成:E步,若参数θ已知,则可根据训练数据推断出隐变量Z的值;M步,若Z的值已知,则可方便地对参数θ做极大似然估计。

事实上,隐变量估计问题也可通过梯度下降等优化算法求解,但由于求和的项数将随着隐变量的数目以指数级上升,会给梯度计算带来麻烦。而EM算法则可看做一种非梯度优化的方法。

极大似然估计(Maximum Likelihood Method)

极大似然估计是用于估计概率模型中参数的最常用的方法。令X1,...,Xn是概率密度函数f(x;θ)一组相互独立的随机变量,则似然函数被定义为

Ln(θ)=i=1nf(Xi;θ)

对数似然函数被定义为ln(θ)=logLn(θ)

似然函数实际上是数据的联合密度,只不过我们将其视为参数的函数。事实上它并不是密度函数,以为它的积分不为1。

θ̂ n被定义为极大似然估计量,是极大化Ln(θ)之后θ的值。注意到,极大化ln(θ)与极大化Ln(θ)的效果是一样的,通常前者的计算会更为简单一些。而且在计算时,通常会忽略掉常数值。

在模型的一些特定条件下,极大似然估计量有一些非常好的特性:

(1) 极大似然估计量依概率收敛于所估计参数的真实值,即θ̂ nPθ

(2) 如果θ̂ nθ的极大似然估计量,那么g(θ̂ n)g(θ)的极大似然估计量;

(3) (θ̂ θ)/sˆeN(0,1),其中sˆe为标准差的估计值;

(4) 在所有估计量中,极大似然估计量是具有最小方差的。

在实际问题中,模型可能非常的复杂,极大似然估计可能并不是最优的,以上的四个性质有可能也不成立。例如,概率密度函数不是平滑的情况。

EM算法

输入:观测变量数据Y,隐变量数据Z,联合分布P(Y,Z|θ),条件分布P(Z|Y,θ)

输出:模型参数θ

(1) 选择参数的初值θ(0),开始迭代;

(2) E步:根据参数初始值或上一次迭代的模型参数来计算隐变量的后验概率,其实就是隐变量的期望,作为隐变量的现估计值:

Qi(z(i))=P(z(i)|x(i);θ)

(3) M步:将似然函数最大化获得新的参数值:

θ(i+1)=argmaxθiz(i)Qi(z(i))logp(x(i),z(i);θ)Qi(z(i))

(4) 重复第(2)步和第(3)步,直到收敛。

下面关于EM算法作几点说明:

步骤(1) 参数的初值可以任意选择,但需要注意EM算法对初值是敏感的。

步骤(4) 给出停止迭代的条件,一般是选择较小的正数ϵ1 ,若满足

||θ(i+1)θ(i)||<ϵ1

则停止迭代。

高斯混合聚类

这个算法在我之前关于聚类算法的博客中提到过,但是只是简单地介绍了下,因为它的求解会用到EM算法,所以我将它放在这里,作为EM算法的一个例子吧。

对n维样本空间X中的随机变量x,若x服从高斯分布,其概率密度函数为:

p(x)=1(2π)n2|Σ|12exp12(xμ)TΣ1(xμ)

其中μ为n维均值向量,Σn×n的协方差矩阵,将概率密度函数记为p(x|μ,Σ)

定义高斯混合分布:

PM(x)=i=1kαip(x|μi,Σi)

该分布共由k个混合成分组成,每个混合成分对应一个高斯分布。其中μiΣi是第i个高斯混合成分的参数,而αi>0为对应的混合系数,ki=1αi=1

假设样本的生成过程由高斯混合分布给出:首先,根据α1,α2,...,αk定义的先验分布选择高斯混合成分,其中αi为选择第i个混合成分的概率;然后根据被选择的混合成分的概率密度函数进行采样,从而生成对应的样本。

令随机变量zj{1,2,...,k}表示生成样本xj的混合高斯分布,其取值未知,该变量就是整个问题的隐变量。显然,zj的先验概率P(zj=i)对应于αi(i=1,2,...,k)。根据贝叶斯定理,zj的后验分布对应于

pM(zj=i|xj)=P(zj=i)pM(xj|zj=i)pM(xj)=αip(xj|μi,Σi)kl=1αlp(xj|μl,Σl)

pM(zj=i|xj)给出了样本xj由第i个高斯混合分布生成的后验概率,将其简记为γji (i = 1, 2, …, k)。

当高斯混合分布已知时,高斯混合聚类将把样本集D划分为k个簇C={C1,C2,...,Ck},每个样本xj的簇标记λj如下确定:

λj=argmaxi{1,2,...,k}γji

从原型聚类的角度看,高斯混合聚类是采用概率模型(高斯分布)对原型进行刻画,簇划分由原型对应后验概率确定。这就是EM算法中的E-step。

对于样本集D,可以采用极大似然估计,即最大化似然

LL(D)=ln(j=1mpM(xj))=j=1mln(i=1kαip(xj|μi,Σi))

采用EM算法1进行迭代优化求解。若参数{(αi,μi,Σi)|1ik}能使上式最大化,则由LL(D)μi=0

j=1mαip(xj|μi,Σi)kl=1αlp(xj|μl,Σl)(xjμi)=0

μi=mj=1γjixjmj=1γji

类似的,由LL(D)Σi=0可得

Σi=mj=1γji(xjμi)(xjμi)Tmj=1γji

对于混合系数αi,除了要最大化LL(D),还需要满足α0,ki=1αi=1,考虑LL(D)的拉格朗日形式

LL(D)+λ(i=1kαi1)

其中λ为拉格朗日乘子,由上式对αi的导数为0,有

j=1mp(xj|μi,Σi)kl=1αlp(xj|μl,Σl)+λ=0

两边同时乘以αi,对所有k求和可知

j=1mi=1kγji+λi=1kαi=0

λ=m,则有

αi=1mj=1mγji

即每个高斯成分的混合系数由样本属于该成分的平均后验概率确定。

PLSA算法

在腾讯实习生招聘的时候,面试官问了这样一个问题:对于两种不同的语言,给了你一些单词的翻译对,如何利用EM算法来做一个翻译系统。因为当时对自然语言处理并不了解,这个问题就没有答上来。其实这个问题与PLSA算法解决的问题很像,只要将生成单词的过程转变为翻译的过程即可。如果不懂PLSA算法的,可以翻一翻我关于自然语言处理的博客。PLSA算法参数的求解也是利用的EM算法,所以也把它作为一个例子放在这里。

E-step:直接使用贝叶斯公式计算隐含变量在当前参数取值下的后验概率。

p(zk|di,wj)=p(wj|zk)p(zk|di)Kk=1p(wj|zk)p(zk|di)

在这个步骤中,我们假定所有的p(wj|zk)p(zk|di)都是已知的,因为初始时随机赋值。后面迭代的过程中取前一轮M步骤中得到的参数值。

M-step:最大化complete data对数似然函数的期望

E(L)=i=1Nj=1Mn(wj,di)k=1Kp(zk|wj,di)log[p(wj|zk)p(zk|di)]

其约束条件是Mj=1p(wj|zk)=1Kk=1p(zk|di)=1。利用拉格朗日乘数法:

H=E(L)+k=1Ktk(1j=1Mp(wj|zk))+i=1Nρi(1k=1Kp(zk|di))

利用求导的方法可以得:

p(wj|zk)=Ni=1n(wj,di)p(zk|wj,di)Mj=1Ni=1n(wj,di)p(zk|wj,di)

p(zk|di)=Mj=1n(wj,di)p(zk|wj,di)n(di)

写在最后

本篇博客的部分内容源自《统计学习方法》、《机器学习》(周志华)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值