【机器学习】EM算法从小白到理解,附带案例代码

前言

\quad\quad 本篇主要介绍 EM算法 相关内容,首先通过极大似然估计引出 EM算法 的作用,然后通过例子引出 EM算法 ,旨在尽可能的通俗易懂地让大家理解 EM算法 ,最后在介绍 EM算法 算法在高斯混合模型(GMM)中的应用,通过Python实现。

\quad\quad 学习机器学习必定会碰到 EM算法,博主希望通过本篇可以帮助到大家,因为博主也在学习中,所以难免会有错误的地方,还望大家多多指教!

本篇代码可见:Github

一、最大似然估计

学习过数理统计的知道,在参数模型中,最大似然估计法MLE)是一种参数估计方法,其思想如下:

在没有其他信息的情况下,我们只能认为在一次 随机试验 中发生的事件具有最大的概率。反过来,如果能够使事件发生的概率 最大化 ,那么该事件也就最有可能发生,因此寻找使概率最大化的参数就是很自然的想法了,最大似然估计法就是基于这样的思想。“似然”在这里就是“可能是”的意思。

1、定义似然函数
  • 假设总体 X X X 是离散总体,其概率分布为 P ( X = x ; θ ) P(X=x;\theta) P(X=x;θ) 记为 f ( x ; θ ) f(x;\theta) f(x;θ),当给定 θ \theta θ 时, f ( x ; θ ) f(x;\theta) f(x;θ) X X X x x x 处发生的概率, ∏ i = 1 n f ( x i ; θ ) \prod_{i=1}^n f(x_i;\theta) i=1nf(xi;θ) 为样本 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn 在点 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn 处发生的概率(联合概率)。当固定 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn 时,让 θ \theta θ 变化,可能存在某个 θ \theta θ 使得概率 ∏ i = 1 n f ( x i ; θ ) \prod_{i=1}^n f(x_i;\theta) i=1nf(xi;θ) 达到最大,记为 θ ^ \hat{\theta} θ^,显然它是 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn 的函数,即选择的参数 θ ^ \hat{\theta} θ^ 是使概率 ∏ i = 1 n f ( x i ; θ ) \prod_{i=1}^n f(x_i;\theta) i=1nf(xi;θ) 达到最大的最值点,因此称 θ ^ ( X 1 , X 2 , . . . , X n ) \hat{\theta}(X_1,X_2,...,X_n) θ^(X1,X2,...,Xn) 是参数 θ \theta θ 的最大似然估计值。

  • 如果总体 X X X 是连续型的,则样本 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn 在点 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn 处发生的概率近似为 ∏ i = 1 n f ( x i ; θ ) Δ x i \prod_{i=1}^n f(x_i;\theta)\Delta x_i i=1nf(xi;θ)Δxi,由于 Δ x i \Delta x_i Δxi 与参数 θ \theta θ 无关,所以 ∏ i = 1 n f ( x i ; θ ) Δ x i \prod_{i=1}^n f(x_i;\theta)\Delta x_i i=1nf(xi;θ)Δxi ∏ i = 1 n f ( x i ; θ ) \prod_{i=1}^n f(x_i;\theta) i=1nf(xi;θ) 关于 θ \theta θ 具有相同的最大值点。

因此,定义 似然函数 为:
L ( θ ; x 1 , x 2 , . . . x n ) = ∏ i = 1 n f ( x i ; θ ) L(\theta;x_1,x_2,...x_n) = \prod_{i=1}^n f(x_i; \theta) L(θ;x1,x2,...xn)=i=1nf(xi;θ)

其中 L ( θ ; x 1 , x 2 , . . . x n ) L(\theta;x_1,x_2,...x_n) L(θ;x1,x2,...xn) 表示当给定样本观测值 x 1 , x 2 , . . . , x n x_1, x_2,...,x_n x1,x2,...,xn 时仅为 θ \theta θ 的函数。

2、最大似然估计

θ \theta θ最大似然估计 定义为满足:
L ( θ ^ ; x 1 , x 2 , . . . , x n ) = max ⁡ θ ∈ Θ L ( θ ; x 1 , x 2 , . . . x n ) L(\hat{\theta};x_1,x_2,...,x_n) = \max_{\theta \in \Theta} L(\theta;x_1,x_2,...x_n) L(θ^;x1,x2,...,xn)=θΘmaxL(θ;x1,x2,...xn) 的统计量 θ ^ ( X 1 , X 2 , . . . , X n ) \hat{\theta}(X_1,X_2,...,X_n) θ^(X1,X2,...,Xn)

3、似然方程

利用极值原理,假设似然函数 L ( θ ; x 1 , x 2 , . . . x n ) L(\theta;x_1,x_2,...x_n) L(θ;x1,x2,...xn) 关于 θ \theta θ 连续可微,令其偏导数为0:
∂ ∂ θ L ( θ ; x 1 , x 2 , . . . x n ) = 0 \frac{\partial}{\partial \theta} L(\theta;x_1,x_2,...x_n) = 0 θL(θ;x1,x2,...xn)=0
其中:
i = ( 1 , 2 , . . . , k ) θ = ( θ 1 , θ 2 , . . . , θ k ) i = (1, 2, ... ,k) \quad\quad \theta=(\theta_1, \theta_2, ..., \theta_k) i=(1,2,...,k)θ=(θ1,θ2,...,θk)
上面方程通常称为似然方程。

由于似然函数是函数相乘的,为了计算方便,我们常常取对数似然函数,很容易知道: L ( θ ; x 1 , x 2 , . . . x n ) L(\theta;x_1,x_2,...x_n) L(θ;x1,x2,...xn) ln ⁡ L ( θ ; x 1 , x 2 , . . . x n ) \ln L(\theta;x_1,x_2,...x_n) lnL(θ;x1,x2,...xn) 在参数空间 Θ \Theta Θ 上具有相同的最大值点,因此似然方程可改写为:

∂ ∂ θ ln ⁡ L ( θ ; x 1 , x 2 , . . . x n ) = 0 \frac{\partial}{\partial \theta} \ln L(\theta;x_1,x_2,...x_n) = 0 θlnL(θ;x1,x2,...xn)=0

通过求解上式得到 θ i ( x 1 , x 2 , . . . x n ) ( i = 1 , 2 , . . . , k ) \theta_i(x_1, x_2,...x_n)(i = 1,2,...,k) θi(x1,x2,...xn)(i=1,2,...,k),记为 θ ^ i ( x 1 , x 2 , . . . , x n ) \hat{\theta}_i(x_1, x_2, ..., x_n) θ^i(x1,x2,...,xn),并称之为参数 θ 1 , θ 2 , . . θ k \theta_1, \theta_2, .. \theta_k θ1,θ2,..θk 的最大似然估计值。

4、例子解释

\quad\quad 随机选择 n n n 个男生,我们知道人的身高是满足正态分布的,假设样本 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn 来自正态分布 N ( μ , σ 2 ) N(\mu, \sigma^2) N(μ,σ2),其中参数 μ , σ 2 \mu, \sigma^2 μ,σ2是未知的,求参数 μ , σ 2 \mu, \sigma^2 μ,σ2 的最大似然估计量 μ , σ 2 \mu, \sigma^2 μ,σ2

解:因为总体满足正态分布,所以总体的密度函数为:
f ( x ; μ , σ 2 ) = 1 2 π σ e x p ( − ( x − μ ) 2 2 σ 2 ) f(x;\mu, \sigma^2) = \frac{1}{\sqrt {2\pi} \sigma} exp({-\frac{(x-\mu)^2}{2\sigma^2}}) f(x;μ,σ2)=2π σ1exp(2σ2(xμ)2)
由似然函数的定义得:
L ( μ , σ 2 ; x 1 , x 2 , . . . , x n ) = ∏ i = 1 n f ( x i ; μ , σ 2 ) L(\mu, \sigma^2;x_1,x_2,...,x_n) = \prod_{i=1}^n f(x_i; \mu, \sigma^2) L(μ,σ2;x1,x2,...,xn)=i=1nf(xi;μ,σ2)
= ∏ i = 1 n 1 2 π σ e x p ( − ( x i − μ ) 2 2 σ 2 ) =\prod_{i=1}^n \frac{1}{\sqrt {2\pi} \sigma} exp({-\frac{(x_i-\mu)^2}{2\sigma^2}}) =i=1n2π σ1exp(2σ2(xiμ)2)
= ( 1 2 π σ 2 ) n 2 e x p ( − ∑ i = 1 n ( x i − μ ) 2 2 σ 2 ) =(\frac{1}{2\pi \sigma^2})^{\frac{n}{2}}exp(-\frac{\sum_{i=1}^n (x_i - \mu)^2}{2 \sigma^2}) =(2πσ21)2nexp(2σ2i=1n(xiμ)2)
两边取对数,得:
ln ⁡ L ( μ , σ 2 ; x 1 , x 2 , . . . , x n ) = − n 2 ln ⁡ ( 2 π σ 2 ) − ∑ i = 1 n ( x i − μ ) 2 2 σ 2 \ln L(\mu, \sigma^2;x_1,x_2,...,x_n) = -\frac{n}{2} \ln(2\pi\sigma^2)-\frac{\sum_{i=1}^n (x_i - \mu)^2}{2 \sigma^2} lnL(μ,σ2;x1,x2,...,xn)=2nln(2πσ2)2σ2i=1n(xiμ)2
对参数 ( μ , σ 2 (\mu, \sigma^2 (μ,σ2 分别求导,得到似然方程:
{ ∂ ∂ μ ln ⁡ L ( μ , σ 2 ; x 1 , x 2 , . . . , x n ) = 1 σ 2 ∑ i = 1 n ( x i − μ ) 2 = 0 ∂ ∂ σ 2 ln ⁡ L ( μ , σ 2 ; x 1 , x 2 , . . . , x n ) = − n 2 σ 2 + 1 2 σ 4 ∑ i = 1 n ( x i − μ ) 2 = 0 \begin{cases} \frac{\partial}{\partial \mu} \ln L(\mu, \sigma^2;x_1,x_2,...,x_n) = \frac{1}{\sigma^2}\sum_{i=1}^n(x_i - \mu)^2 = 0 \\ \\ \frac{\partial}{\partial \sigma^2} \ln L(\mu, \sigma^2;x_1,x_2,...,x_n) =-\frac{n}{2\sigma^2} + \frac{1}{2\sigma^4}\sum_{i=1}^n(x_i - \mu)^2 = 0 \end{cases} μlnL(μ,σ2;x1,x2,...,xn)=σ21i=1n(xiμ)2=0σ2lnL(μ,σ2;x1,x2,...,xn)=2σ2n+2σ41i=1n(xiμ)2=0
解得:
{ μ = 1 n ∑ i = 1 n x i σ 2 = 1 n ∑ i = 1 n ( x i − x ‾ ) 2 \begin{cases} \mu = \frac{1}{n}\sum_{i=1}^n x_i \\ \\ \sigma^2 = \frac{1}{n}\sum_{i=1}^n(x_i - \overline{x})^2 \end{cases} μ=n1i=1nxiσ2=n1i=1n(xix)2

所以参数 μ , σ 2 \mu, \sigma^2 μ,σ2 的最大似然估计量为 μ ^ = 1 n ∑ i = 1 n x i \hat{\mu} = \frac{1}{n}\sum_{i=1}^n x_i μ^=n1i=1nxi σ 2 ^ = 1 n ∑ i = 1 n ( x i − x ‾ ) 2 \hat{\sigma^2} = \frac{1}{n}\sum_{i=1}^n(x_i - \overline{x})^2 σ2^=n1i=1n(xix)2

5、求极大似然估计量的一般步骤
  • 写出似然函数;
  • 取对数似然函数,并整理;
  • 求导数,令导数为0,得到似然方程;
  • 求解似然方程,得到的参数即为所求;

\quad\quad 通过以上分析,我们可以知道极大似然估计(MLE)就是利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值的计算过程。简单地说,就是给定了一定的数据,假定知道数据是从某种分布中随机抽取出来的,但是不知道这个分布的具体的参数值,即“模型已定,参数未知”,MLE就可以用来估计模型的参数。MLE的目标是找出一组参数(模型中的参数),使得模型产出数据的概率最大。

二、引出 EM算法

现在我们已经知道,极大似然估计就是:知道模型,反推参数。

\quad\quad 下面我们将上面的例子进一步延伸,前面我们只随机选取了 n n n 个男生,这次我们随机选取 100 个 男生和 100 个女生,他/她们的身高组成样本集 X = ( X 1 , X 2 , . . . , X n ) ( n = 200 ) X = (X_1, X_2, ...,X_n) (n =200) X=(X1,X2,...,Xn)(n=200) ,假定男生的身高服从正态分布: N ( μ 1 , σ 1 2 ) N(\mu_1, \sigma_1^2) N(μ1,σ12),女生的身高服从另一个正态分布: N ( μ 2 , σ 2 2 ) N(\mu_2, \sigma_2^2) N(μ2,σ22),但是我们不知道具体的模型参数 μ , σ 2 \mu,\sigma^2 μ,σ2,现在我们的目标就是求未知的模型参数。

1、思考

\quad\quad 这个例子也是:知道模型,反推参数,但是我们发现此时有两个模型的参数需要求,而极大似然估计法中的概率分布只有一个或者我们知道上面的样本哪个是男生哪个是女生(即:知道样本是通过哪个概率分布得到的),只不过我们不知道这个概率分布的参数,此时求解只需要根据模型对应的样本求解相应模型的参数,分别进行类似的求解就可以得到两个模型的参数。

\quad\quad 但是现在这100个男生和100个女生混合在一起了,我们并不知道每个样本是来自哪个概率分布,这个时候样本来自哪个概率分布就成了一个 隐变量 (本例也就是样本是男生还是女生)。

通常来说,我们只有知道了精确的男女生身高的正态分布参数,我们才能知道每一个人更有可能是男生还是女生。反过来,我们只有知道了每个人是男生还是女生,才能尽可能准确地估计男女各自身高的正态分布的参数。

EM算法 便是为了解决上面使用“极大似然估计法”存在的缺陷(含有隐变量)。

2、什么是 EM算法

EM算法(Expectation-maximization Algorithm,最大期望算法或期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量:

EM算法 经过两个步骤交替进行计算,是一种迭代算法:

  • E:计算期望,利用对隐变量的现有估计值,计算其最大似然估计值;
  • M:最大化,最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。
3、隐变量

\quad\quad 我们知道,EM算法极大似然估计法 区别就在于 EM算法 多了隐变量,那么理解 EM算法 中的隐变量便成了关键。

通常,我们用 Y Y Y 表示观测到的随机变量的数据(如上面例子中样本的身高), Z Z Z 表示隐随机变量的数据(如上面例子中观测不到样本是从哪个概率分布中得到的,所以这个叫做隐变量。

  • 完全数据: Y Y Y Z Z Z 连在一起
  • 不完全数据:仅 Y Y Y 一个

EM算法 面临的主要主要问题就是:有个隐变量数据 Z Z Z ,如果 Z Z Z 已知的话,那么问题就可以通过极大似然估计求解了。那么 EM算法 又是怎么处理这个问题的呢?我们举个例子来说明:

假定你是一个幼儿园老师,有一杯牛奶,现在需要把牛奶 平均分配 给表现优秀的小朋友。如果只有一个表现优秀小朋友那都给他就好了,但是如果有两个表现优秀的小朋友,由于我们不知道到底每个小朋友应该分多少牛奶,所以无法一次性把牛奶平均分配。

相信大家的做法都可以描述如下:

  • 先拿两个杯子,将牛奶随意地分到两个杯子,然后看看哪个杯子中的牛奶多,就把多的杯子往少的杯子中匀一点,之后重复多次这个过程,直到两个杯子中的牛奶一样多。

上面的例子中,平均分配这个果可以看作“观测数据”,为了达到平均分配而给每个杯子分配多少牛奶可以看作“待求参数”,每次比较后匀一点的手感可以看作是“概率分布”。

如果只有一个表现优秀的小朋友,那么概率分布就确定了(就是把牛奶都倒到这个小朋友的杯子里),但是因为有两个表现优秀的小朋友,所以我们无法一次就能够平均分配,不过可以采用上面描述的方式来实现最终的目标。

4、EM算法的思想
  1. 给参数 θ \theta θ 自主初始化个初值(如:既然我们不知道要平均分配牛奶到两个杯子,两个杯子到底要分配多少,那我们可以先估计这个值);
  2. 根据给定观测数据和当前的参数 θ \theta θ,求未观测数据的条件概率分布的期望(如:在上一步中,已经根据初值的概率分布将牛奶分配到两个杯子,然后这一步根据“比较两个杯子各有多少牛奶”来判断此次分配的结果)
  3. 上一步中未观测数据已经求出来了,于是根据极大似然估计求最优的参数 θ ^ \hat{\theta} θ^(上一步中既然分配结果已经有了,那么就根据概率分布判断下杯子里应该有多少牛奶,然后把牛奶匀一下)
  4. 因为第二步和第三步的结果可能不是最优的,所以重复第二步和第三步,直到收敛(重复多次匀一点的操作,直到两个杯子的牛奶大致一样多)
5、例子解释

有两个硬币 A A A B B B,假设随机抛硬币后正面朝上的概率分别为 P A , P B P_A,P_B PAPB,为了顾及这两个硬币正面朝上的概率,我们轮流抛硬币 A A A B B B,每一轮都连续抛5次,总共5轮,观测结果如下:

硬币结果统计
A正正反正反3正-2反
B反反正正反2正-3反
A正反反反反1正-4反
B正反反正正3正2反
A反正正反反2正-3反

根据上表数据,我们知道A硬币抛了15次,B硬币抛了10次,很容易求得:
P A = ( 3 + 1 + 2 ) / 15 = 0.4 P_A = (3+1+2) / 15 = 0.4 PA=(3+1+2)/15=0.4
P B = ( 2 + 3 ) / 10 = 0.5 P_B = (2+3) / 10 = 0.5 PB=(2+3)/10=0.5
当然,这个结果并不能完全说明 P A , P B P_A,P_B PAPB ,但是要是试验的次数足够多,根据“大数定理”,这个值可以无限接近真实的 P A , P B P_A,P_B PAPB

问题来了,要是我们不知道每轮抛的硬币是A还是B呢?然后再轮流抛5轮,观测结果如下:

硬币结果统计
未知正正反正反3正-2反
未知反反正正反2正-3反
未知正反反反反1正-4反
未知正反反正正3正2反
未知反正正反反2正-3反

我们要求的目标没有变,还是求:硬币A和B正面朝上的概率 P A , P B P_A,P_B PAPB

此时,该问题就多了一个硬币种类的隐变量,设为 Z = ( z 1 , z 2 , z 3 , z 4 , z 5 ) Z=(z_1,z_2,z_3,z_4,z_5) Z=(z1,z2,z3,z4,z5),代表每轮抛硬币所使用的硬币是A还是B

  • 其中这个隐变量 Z Z Z 我们是不知道,就无法估计 P A , P B P_A,P_B PAPB,所以我们必须先估计出 Z Z Z ,然后才能进一步估计 P A , P B P_A,P_B PAPB
  • 但是要估计 Z Z Z ,我们又要知道 P A , P B P_A,P_B PAPB,这样我们才能用极大似然估计法去估计 Z Z Z,那么这不就是鸡生蛋和蛋生鸡的问题了吗?那么又该如何解决呢?

答案就是:先随机初始化一个 P A , P B P_A,P_B PAPB,用它来估计 Z Z Z ,然后基于 Z Z Z ,还是按照极大似然估计法去估计新的 P A , P B P_A,P_B PAPB,如果新的 P A , P B P_A,P_B PAPB和我们初始化的 P A , P B P_A,P_B PAPB一样,那么说明:我们初始化的值是一个相当靠谱的估计!也就是说,我们初始化的 P A , P B P_A,P_B PAPB,按照最大似然估计法可以估计出 Z Z Z ,然后基于 Z Z Z ,按照最大似然估计法可以反过来估计出 P 1 , P 2 P_1,P_2 P1P2,当 P 1 , P 2 P_1,P_2 P1P2 P A , P B P_A,P_B PAPB一样时,说明 P 1 , P 2 P_1,P_2 P1P2 很有可能就是真实的值。如果新估计出来的 P A , P B P_A,P_B PAPB 和我们初始化的值差别很大,就继续使用新的 P A , P B P_A,P_B PAPB进行迭代,直到收敛。


不妨假设, P A = 0.2 , P B = 0.7 P_A = 0.2,P_B=0.7 PA=0.2PB=0.7;然后我们看第一轮抛掷的最可能的是哪个硬币:

  • 如果是硬币A,得出3正2反的概率为:
    0.2 ∗ 0.2 ∗ 0.2 ∗ 0.8 ∗ 0.8 = 0.00512 0.2*0.2*0.2*0.8*0.8 = 0.00512 0.20.20.20.80.8=0.00512
  • 如果是硬币B,得出3正2反的概率为:
    0.7 ∗ 0.7 ∗ 0.7 ∗ 0.3 ∗ 0.3 = 0.03087 0.7*0.7*0.7*0.3*0.3 = 0.03087 0.70.70.70.30.3=0.03087

然后依次求出其他四轮的相应概率,如下表:

轮数若是硬币A若是硬币B按照最大似然法则
13正-2反——0.005123正-2反——0.03087最有可能的是硬币B
22正-3反——0.020482正-3反——0.01323最有可能的是硬币A
31正-4反——0.081921正-4反——0.00567最有可能的是硬币A
43正2反——0.005123正2反——0.03087最有可能的是硬币B
52正-3反——0.020482正-3反——0.01323最有可能的是硬币A

此时根据更有可能的硬币计算新的 P A , P B P_A,P_B PAPB
P A = ( 2 + 1 + 2 ) / 15 = 0.33 P_A = (2+1+2) / 15 = 0.33 PA=(2+1+2)/15=0.33
P B = ( 3 + 3 ) / 10 = 0.6 P_B = (3+3) / 10 = 0.6 PB=(3+3)/10=0.6

至此,我们得到如下表:

初始化的 P A P_A PA估计出的 P A P_A PA真实的 P A P_A PA初始化的 P B P_B PB估计出的 P B P_B PB真实的 P B P_B PB
0.20.330.40.70.60.5

其中,将上文中得到的 P A = 0.4 , P B = 0.5 P_A= 0.4,P_B = 0.5 PA=0.4PB=0.5两个值称为 P A , P B P_A,P_B PAPB的真实值。

由上表可以看出,我们估计的新的 P A , P B P_A,P_B PAPB相比于它们的初始值更接近它们的真实值了,就这样重复迭代,不断接近真实值,这就是 EM算法 的奇妙之处了。

三、EM算法

1、三硬币模型

假设有3枚硬币,分别记作 A , B , C A,B,C A,B,C,这些硬币正面出现的概率分别是 π , p , q \pi,p,q π,p,q,进行如下试验:
先掷硬币 A A A根据其结果选出硬币 B B B或者硬币 C C C,正面选硬币 B B B,反面选硬币 C C C;然后掷出选出的硬币,出现正面记为1,反面记为0;独立地重复 n n n次试验(这里 n n n取10),观测结果如下:
1101001101
假设只能观测到掷硬币的结果,不能观测掷硬币的过程,问如何估计三个硬币正面出现的概率,即三硬币模型的参数。

三硬币模型可写为:
p ( x ∣ θ ) = ∑ z p ( x , z ∣ θ ) = ∑ z p ( z ∣ θ ) p ( x ∣ z , θ ) = π p x ( 1 − p ) 1 − x + ( 1 − π ) q x ( 1 − q ) 1 − x p(x|\theta) = \sum_z p(x,z|\theta) = \sum_z p(z|\theta)p(x|z, \theta) \\ = \pi p^x(1-p)^{1-x}+ (1-\pi)q^x(1-q)^{1-x} p(xθ)=zp(x,zθ)=zp(zθ)p(xz,θ)=πpx(1p)1x+(1π)qx(1q)1x

这里,随机变量 x x x是观测变量,表示一次试验观测的结果1或0;随机变量 z z z是隐变量,表示未观测到的掷硬币 A A A的结果; θ = ( π , p , q ) \theta=(\pi,p,q) θ=(π,p,q)是模型参数。
p ( A B ) = p ( A ) p ( B ∣ A ) p(AB) = p(A)p(B|A) p(AB)=p(A)p(BA)

下面将观测数据表示为 X = ( x 1 , x 2 , . . . , x n ) T X = (x_1,x_2,...,x_n)^T X=(x1,x2,...,xn)T,未观测数据表示为 Z = ( z 1 , z 2 , . . . , z n ) T Z = (z_1,z_2,...,z_n)^T Z=(z1,z2,...,zn)T,则观测数据的似然函数为:
p ( X ∣ θ ) = ∑ z p ( Z ∣ θ ) p ( X ∣ Z , θ ) p(X|\theta) = \sum_z p(Z|\theta)p(X|Z,\theta) p(Xθ)=zp(Zθ)p(XZ,θ)
即:
p ( X ∣ θ ) = ∏ j = 1 n [ π p x j ( 1 − p ) 1 − x j + ( 1 − π ) q x j ( 1 − q ) 1 − x j ] p(X|\theta) = \prod_{j=1}^{n}[\pi p^{x_j}(1-p)^{1-x_j}+ (1-\pi)q^{x_j}(1-q)^{1-x_j}] p(Xθ)=j=1n[πpxj(1p)1xj+(1π)qxj(1q)1xj]
考虑求模型参数 θ = ( π , p , q ) \theta=(\pi,p,q) θ=(π,p,q)的极大似然估计,取对数似然:

θ M L E = a r g max ⁡ θ l o g   p ( X ∣ θ ) \theta_{MLE} = arg \max_\theta log \ p(X|\theta) θMLE=argθmaxlog p(Xθ)

EM算法 通过迭代求 L ( θ ) = l o g   p ( X ∣ θ ) \mathcal{L}(\theta) = log \ p(X|\theta) L(θ)=log p(Xθ)的极大似然估计。每次迭代包含两步:
E步:求期望;M步:求极大化。

此问题的求解可见下文第三大点

2、EM算法

输入: 观测变量数据 X X X,隐变量数据 Z Z Z,联合分布 p ( X , Z ∣ θ ) p(X,Z|\theta) p(X,Zθ),条件分布 p ( Z ∣ X , θ ) p(Z|X,\theta) p(ZX,θ);

输出:模型参数 θ \theta θ

(1)选择参数的初值 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;
(2)E步:记 θ ( i ) \theta^{(i)} θ(i)为第 i i i次迭代参数 θ \theta θ的估计值,在第 i + 1 i+1 i+1次迭代的E步,计算:
Q ( θ , θ ( i ) ) = E z [ l o g   p ( X , Z ∣ θ ) ∣ X , θ ( i ) ] = ∑ z p ( X , Z ∣ θ ) p ( Z ∣ X , θ ( i ) ) Q(\theta,\theta^{(i)} )= E_z[log \ p(X,Z|\theta)|X,\theta^{(i)}] \\ =\sum_z p(X,Z|\theta)p(Z|X,\theta^{(i)}) Q(θ,θ(i))=Ez[log p(X,Zθ)X,θ(i)]=zp(X,Zθ)p(ZX,θ(i))

这里, p ( Z ∣ X , θ ( i ) ) p(Z|X,\theta^{(i)}) p(ZX,θ(i))表示在给定观测数据 X X X和当前的参数估计 θ ( i ) \theta^{(i)} θ(i)下隐变量数据 Z Z Z的条件概率分布;

(3)M步:求使 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)} ) Q(θ,θ(i))极大化的 θ \theta θ,确定第 i + 1 i+1 i+1次迭代的参数估计值 θ ( i + 1 ) \theta^{(i+1)} θ(i+1)
θ ( i + 1 ) = a r g max ⁡ θ Q ( θ , θ ( i ) ) \theta^{(i+1)} = arg \max_\theta Q(\theta,\theta^{(i)} ) θ(i+1)=argθmaxQ(θ,θ(i))
(4)重复第(2)步和第(3)步,直到收敛。

注:

  • 函数 Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)} ) Q(θ,θ(i))EM算法 的核心,称为Q函数。
  • 参数的初值可以任意选择,但 EM算法 对初值是敏感的
  • Q ( θ , θ ( i ) ) Q(\theta,\theta^{(i)} ) Q(θ,θ(i)) θ \theta θ表示要极大化的参数, θ ( i ) \theta^{(i)} θ(i)表示当前估计值,每次迭代实际在求Q函数及其极大化
  • M步求Q函数的极大化,得到 θ ( i + 1 ) \theta^{(i+1)} θ(i+1),完成一次迭代
  • 第(4)步给出停止迭代的条件,一般是对较小的正数 E 1 , E 2 \mathcal{E}_1,\mathcal{E}_2 E1,E2,若满足:
  • ∣ ∣ θ ( i + 1 ) − θ ( i ) ∣ ∣ ⩽ E 1 , 或 ∣ ∣ Q ( θ ( i + 1 ) , θ ( i ) ) − Q ( θ ( i ) , θ ( i ) ) ∣ ∣ ⩽ E 2 ||\theta^{(i+1)}-\theta^{(i)}|| \leqslant \mathcal{E}_1,或 ||Q(\theta^{(i+1)},\theta^{(i)} )-Q(\theta^{(i)} ,\theta^{(i)} )|| \leqslant \mathcal{E}_2 θ(i+1)θ(i)E1,Q(θ(i+1),θ(i))Q(θ(i),θ(i))E2
  • 则停止迭代。
3、 EM算法 公式推导

\quad\quad 上面我们给出了 EM算法 ,那么为什么 EM算法 能近似实现对观测数据的极大似然估计呢?下面通过近似求解观测数据的对数似然函数的极大化问题来导出 EM算法

由上面内容可以知道,极大化观测数据 X X X关于参数 θ \theta θ的对数似然函数,即极大化:
L ( θ ) = l o g   p ( X ∣ θ ) = l o g   ∑ z p ( X , Z ∣ θ ) = l o g ( ∑ z p ( X ∣ Z , θ ) p ( Z ∣ θ ) ) \mathcal{L}(\theta) = log\ p(X|\theta) = log \ \sum_z p(X,Z|\theta)= log \Big(\sum_z p(X|Z,\theta)p(Z|\theta)\Big) L(θ)=log p(Xθ)=log zp(X,Zθ)=log(zp(XZ,θ)p(Zθ))

注意到:上式中有未观测数据并包含和的对数

事实上, EM算法 是通过迭代逐步近似极大化 L ( θ ) \mathcal{L}(\theta) L(θ)的。

假设在第 i i i次迭代后 θ \theta θ的估计值是 θ ( i ) \theta^{(i)} θ(i),我们希望新估计值 θ \theta θ能使 L ( θ ) \mathcal{L}(\theta) L(θ)增加,即 L ( θ ) > L ( θ ( i ) ) \mathcal{L}(\theta) > \mathcal{L}(\theta^{(i)}) L(θ)>L(θ(i)),并逐步达到极大值,为此考虑两者的差:
L ( θ ) − L ( θ ( i ) ) = l o g ( ∑ z p ( X ∣ Z , θ ) p ( Z ∣ θ ) ) − l o g   p ( X ∣ θ ( i ) ) \mathcal{L}(\theta) - \mathcal{L}(\theta^{(i)}) = log \Big(\sum_z p(X|Z,\theta)p(Z|\theta)\Big) - log\ p(X|\theta^{(i)}) L(θ)L(θ(i))=log(zp(XZ,θ)p(Zθ))log p(Xθ(i))

log函数为凹函数,利用 J e n s e n Jensen Jensen不等式(关于Jensen不等式可看下面第4点),即:函数的期望小于等于期望的函数
l o g ∑ j λ j y i ⩾ ∑ j λ j l o g   y j log \sum_j \lambda_jy_i \geqslant \sum_j \lambda_j log\ y_j logjλjyijλjlog yj
其中 λ j ⩾ 0 , ∑ j λ j = 1 \lambda_j \geqslant 0, \sum_j \lambda_j = 1 λj0,jλj=1

将两者差的式子前部分分子分母同时乘以 p ( X ∣ Z , θ ( i ) ) p(X|Z,\theta^{(i)}) p(XZ,θ(i)),在利用凹函数的Jensen不等式:

L ( θ ) − L ( θ ( i ) ) = l o g ( ∑ z p ( X ∣ Z , θ ( i ) ) p ( X ∣ Z , θ ) p ( Z ∣ θ ) p ( X ∣ Z , θ ( i ) ) ) − l o g   p ( X ∣ θ ( i ) ) ⩾ ∑ z p ( Z ∣ X , θ ( i ) ) l o g p ( X ∣ Z , θ ) p ( Z ∣ θ ) p ( Z ∣ X , θ ( i ) ) − l o g   p ( X ∣ θ ( i ) ) = ∑ z p ( Z ∣ X , θ ( i ) ) l o g p ( X ∣ Z , θ ) p ( Z ∣ θ ) p ( Z ∣ X , θ ( i ) ) p ( X ∣ θ ( i ) ) \mathcal{L}(\theta) - \mathcal{L}(\theta^{(i)}) = log \big(\sum_z p(X|Z,\theta^{(i)})\frac{p(X|Z,\theta)p(Z|\theta)}{p(X|Z,\theta^{(i)})}\big) - log\ p(X|\theta^{(i)}) \\ \geqslant \sum_z p(Z|X,\theta^{(i)})log\frac{p(X|Z,\theta)p(Z|\theta)}{p(Z|X,\theta^{(i)})} - log\ p(X|\theta^{(i)}) \\ = \sum_z p(Z|X,\theta^{(i)})log\frac{p(X|Z,\theta)p(Z|\theta)}{p(Z|X,\theta^{(i)})p(X|\theta^{(i)})} L(θ)L(θ(i))=log(zp(XZ,θ(i))p(XZ,θ(i))p(XZ,θ)p(Zθ))log p(Xθ(i))zp(ZX,θ(i))logp(ZX,θ(i))p(XZ,θ)p(Zθ)log p(Xθ(i))=zp(ZX,θ(i))logp(ZX,θ(i))p(Xθ(i))p(XZ,θ)p(Zθ)

令:
B ( θ , θ ( i ) ) = L ( θ ( i ) ) + ∑ z p ( Z ∣ X , θ ( i ) ) l o g p ( X ∣ Z , θ ) p ( Z ∣ θ ) p ( Z ∣ X , θ ( i ) ) p ( X ∣ θ ( i ) ) B(\theta,\theta^{(i)}) = \mathcal{L}(\theta^{(i)})+\sum_z p(Z|X,\theta^{(i)})log\frac{p(X|Z,\theta)p(Z|\theta)}{p(Z|X,\theta^{(i)})p(X|\theta^{(i)})} B(θ,θ(i))=L(θ(i))+zp(ZX,θ(i))logp(ZX,θ(i))p(Xθ(i))p(XZ,θ)p(Zθ)
则:
L ( θ ) ⩾ B ( θ , θ ( i ) ) \mathcal{L}(\theta) \geqslant B(\theta,\theta^{(i)}) L(θ)B(θ,θ(i))
即函数 B ( θ , θ ( i ) ) B(\theta,\theta^{(i)}) B(θ,θ(i)) L ( θ ) \mathcal{L}(\theta) L(θ)的一个下届,因此任何使 B ( θ , θ ( i ) ) B(\theta,\theta^{(i)}) B(θ,θ(i))增大的 θ \theta θ都会使 L ( θ ) \mathcal{L}(\theta) L(θ)的下届增大,也即使 L ( θ ) \mathcal{L}(\theta) L(θ)增大,为了使 L ( θ ) \mathcal{L}(\theta) L(θ)尽可能的大,自然选择使 B ( θ , θ ( i ) ) B(\theta,\theta^{(i)}) B(θ,θ(i))达到最大的 θ ( i + 1 ) \theta^{(i+1)} θ(i+1),即:
θ ( i + 1 ) = a r g max ⁡ θ B ( θ , θ ( i ) ) \theta^{(i+1)} = arg \max_\theta B(\theta,\theta^{(i)}) θ(i+1)=argθmaxB(θ,θ(i))

现在求 θ ( i + 1 ) \theta^{(i+1)} θ(i+1)的表达式,省去对 θ \theta θ的极大化而言的常数的项,有:
θ ( i + 1 ) = a r g max ⁡ θ ( L ( θ ( i ) ) + ∑ z p ( Z ∣ X , θ ( i ) ) l o g p ( X ∣ Z , θ ) p ( Z ∣ θ ) p ( Z ∣ X , θ ( i ) ) p ( X ∣ θ ( i ) ) ) = a r g max ⁡ θ ( ∑ z p ( Z ∣ X , θ ( i ) ) l o g   ( p ( X ∣ Z , θ ) p ( Z ∣ θ ) ) ) = a r g max ⁡ θ ( ∑ z p ( Z ∣ X , θ ( i ) ) l o g   ( p ( X , Z ∣ θ ) ) = a r g max ⁡ θ Q ( θ , θ ( i ) ) \theta^{(i+1)} = arg \max_\theta \big(\mathcal{L}(\theta^{(i)})+\sum_z p(Z|X,\theta^{(i)})log\frac{p(X|Z,\theta)p(Z|\theta)}{p(Z|X,\theta^{(i)})p(X|\theta^{(i)})} \big) \\ = arg \max_\theta \big(\sum_z p(Z|X,\theta^{(i)})log \ (p(X|Z,\theta)p(Z|\theta))\big) \\ = arg \max_\theta \big(\sum_z p(Z|X,\theta^{(i)})log \ (p(X,Z|\theta)\big) \\ = arg \max_\theta Q(\theta,\theta^{(i)}) θ(i+1)=argθmax(L(θ(i))+zp(ZX,θ(i))logp(ZX,θ(i))p(Xθ(i))p(XZ,θ)p(Zθ))=argθmax(zp(ZX,θ(i))log (p(XZ,θ)p(Zθ)))=argθmax(zp(ZX,θ(i))log (p(X,Zθ))=argθmaxQ(θ,θ(i))

E M EM EM算法是通过不断求解下界的极大化逼近求解对数似然函数极大化的算法。

在这里插入图片描述

  • 上图给出 E M EM EM算法的直观解释。图中上方曲线为 L ( θ ) \mathcal{L}(\theta) L(θ),下方曲线为 B ( θ , θ ( i ) ) B(\theta,\theta^{(i)}) B(θ,θ(i)),图中在点 θ = θ ( i ) \theta = \theta^{(i)} θ=θ(i) 处时 L ( θ ) \mathcal{L}(\theta) L(θ) 并没用达到极大值,这时使 B ( θ , θ ( i ) ) B(\theta,\theta^{(i)}) B(θ,θ(i))极大化,由于 L ( θ ) ⩾ B ( θ , θ ( i ) ) \mathcal{L}(\theta) \geqslant B(\theta,\theta^{(i)}) L(θ)B(θ,θ(i)),所以 L ( θ ) \mathcal{L}(\theta) L(θ)在每次迭代中也是增加的。
  • 在这个过程中, L ( θ ) \mathcal{L}(\theta) L(θ)不断增大,从图中可以看出 EM算法 不能保证找到全局最优解。

使用迭代必须保证 p ( X ∣ θ ( i ) ) p(X|\theta^{(i)}) p(Xθ(i)单调递增:
l o g   p ( X ∣ θ ( i + 1 ) ) ⩾ l o g   p ( X ∣ θ ( i ) ) log \ p(X|\theta^{(i+1)}) \geqslant log \ p(X|\theta^{(i)}) log p(Xθ(i+1))log p(Xθ(i))
证明:
由:
p ( X ) = p ( X , Z ) p ( Z ∣ X ) p(X) = \frac{p(X,Z)}{p(Z|X)} p(X)=p(ZX)p(X,Z)
得到:
E [ l o g   p ( X ∣ θ ) ] = E [ l o g   p ( X , Z ∣ θ ) − l o g   p ( Z ∣ X , θ ) ] E[log\ p(X|\theta)] = E[log \ p(X,Z|\theta)-log \ p(Z|X,\theta)] E[log p(Xθ)]=E[log p(X,Zθ)log p(ZX,θ)]

求期望,连续变量即求积分,离散变量即求和,上面我们用的都是求和,这个使用求积分,是为了让大家理解上面求和符号怎么来的。

上式左端:
= ∫ z l o g   p ( X ∣ θ ) p ( Z ∣ X , θ ( i ) ) d z = l o g   p ( X ∣ θ ) = \int_z log \ p(X|\theta)p(Z|X,\theta^{(i)})dz = log \ p(X|\theta) =zlog p(Xθ)p(ZX,θ(i))dz=log p(Xθ)

这个式子中, l o g   p ( X ∣ θ ) log \ p(X|\theta) log p(Xθ) 不包含 z z z,所以可以提出来;而 ∫ z p ( Z ∣ X , θ ( i ) ) d z = 1 \int_zp(Z|X,\theta^{(i)})dz = 1 zp(ZX,θ(i))dz=1 ,也就是说在观测数据 X X X 下,属于某个分布 z i z_i zi 的概率,对属于每个分布的求积分(即一个数据属于每个分布的概率的和,自然等于1)

上式右端:
= ∫ z l o g   p ( X , Z ∣ θ ) p ( Z ∣ X , θ ( i ) ) d z − ∫ z l o g   p ( Z ∣ X , θ ) p ( Z ∣ X , θ ( i ) d z = \int_z log \ p(X,Z|\theta)p(Z|X,\theta^{(i)})dz-\int_z log \ p(Z|X,\theta)p(Z|X,\theta^{(i)}dz =zlog p(X,Zθ)p(ZX,θ(i))dzzlog p(ZX,θ)p(ZX,θ(i)dz
上式减号左边的式子与上面 θ ( i + 1 ) \theta^{(i+1)} θ(i+1)中的式子一样,我们将其设为 Q ( θ , θ ( i ) ) Q(\theta, \theta^{(i)}) Q(θ,θ(i)),减号后面一项设为 H ( θ , θ ( i ) ) H(\theta, \theta^{(i)}) H(θ,θ(i))

那么对数似然函数(等式)可写为:
l o g   p ( X ∣ θ ) = Q ( θ , θ ( i ) ) − H ( θ , θ ( i ) ) log \ p(X|\theta) = Q(\theta, \theta^{(i)}) - H(\theta, \theta^{(i)}) log p(Xθ)=Q(θ,θ(i))H(θ,θ(i))

因为求得是极大似然函数估计,那么 Q ( θ ( i + 1 ) , θ ( i ) ) ⩾ Q ( θ , θ ( i ) ) Q(\theta^{(i+1)}, \theta^{(i)}) \geqslant Q(\theta, \theta^{(i)}) Q(θ(i+1),θ(i))Q(θ,θ(i))

  • 假如对于所有的 θ \theta θ都有 H ( θ ( i ) , θ ( i ) ) ⩾ H ( θ , θ ( i ) ) H(\theta^{(i)}, \theta^{(i)}) \geqslant H(\theta, \theta^{(i)}) H(θ(i),θ(i))H(θ,θ(i))

  • => 那么 H ( θ ( i ) , θ ( i ) ) ⩾ H ( θ ( i + 1 ) , θ ( i ) ) H(\theta^{(i)}, \theta^{(i)}) \geqslant H(\theta^{(i+1)}, \theta^{(i)}) H(θ(i),θ(i))H(θ(i+1),θ(i))

这样一来,对数似然函数就会逐渐增大。

那么我们又该如何证明对于所有的 θ \theta θ都有 H ( θ ( g ) , θ ( g ) ) ⩾ H ( θ , θ ( g ) ) H(\theta^{(g)}, \theta^{(g)}) \geqslant H(\theta, \theta^{(g)}) H(θ(g),θ(g))H(θ,θ(g))

证明:
H ( θ ( i ) , θ ( i ) ) − H ( θ , θ ( i ) ) ⩾ 0 = ∫ z l o g   p ( Z ∣ X , θ ( i ) ) p ( Z ∣ X , θ ( i ) ) d z − ∫ z l o g   p ( Z ∣ X , θ ) p ( Z ∣ X , θ ( i ) ) d z = ∫ z l o g ( p ( Z ∣ X , θ ( i ) ) p ( Z ∣ X , θ ) ) p ( Z ∣ X , θ ( i ) ) d z = − ∫ z l o g ( p ( Z ∣ X , θ ) p ( Z ∣ X , θ ( i ) ) ) p ( Z ∣ X , θ ( i ) ) d z H(\theta^{(i)}, \theta^{(i)}) - H(\theta, \theta^{(i)}) \geqslant 0 \\ = \int_z log \ p(Z|X,\theta^{(i)})p(Z|X,\theta^{(i)})dz - \int_z log \ p(Z|X,\theta)p(Z|X,\theta^{(i)})dz \\ = \int_z log(\frac{p(Z|X,\theta^{(i)})}{p(Z|X,\theta)})p(Z|X,\theta^{(i)})dz \\ = - \int_z log(\frac{p(Z|X,\theta)}{p(Z|X,\theta^{(i)})})p(Z|X,\theta^{(i)})dz H(θ(i),θ(i))H(θ,θ(i))0=zlog p(ZX,θ(i))p(ZX,θ(i))dzzlog p(ZX,θ)p(ZX,θ(i))dz=zlog(p(ZX,θ)p(ZX,θ(i)))p(ZX,θ(i))dz=zlog(p(ZX,θ(i))p(ZX,θ))p(ZX,θ(i))dz
利用 J e n s e n Jensen Jensen不等式(函数的期望大于等于期望的函数):
⩾ − l o g ∫ z p ( Z ∣ X , θ ) p ( Z ∣ X , θ ( i ) ) p ( Z ∣ X , θ ( i ) ) d z = 0 \geqslant -log \int_z\frac{p(Z|X,\theta)}{p(Z|X,\theta^{(i)})}p(Z|X,\theta^{(i)})dz = 0 logzp(ZX,θ(i))p(ZX,θ)p(ZX,θ(i))dz=0

上式 l o g log log 中:
∫ z p ( Z ∣ X , θ ) p ( Z ∣ X , θ ( i ) ) p ( Z ∣ X , θ ( i ) ) d z = 1 \int_z\frac{p(Z|X,\theta)}{p(Z|X,\theta^{(i)})}p(Z|X,\theta^{(i)})dz=1 zp(ZX,θ(i))p(ZX,θ)p(ZX,θ(i))dz=1
消去 p ( Z ∣ X , θ ( i ) ) p(Z|X,\theta^{(i)}) p(ZX,θ(i))为:
∫ z p ( Z ∣ X , θ ) d z = 1 \int_zp(Z|X,\theta)dz = 1 zp(ZX,θ)dz=1

4、Jensen不等式

f f f 是定义域为实数的函数:

  • 如果对于所有的实数 x x x f ( x ) f(x) f(x) 的二次导数 f ′ ′ ( x ) ⩾ 0 f''(x) \geqslant 0 f(x)0,那么 f f f 是凸函数;
  • x x x 是向量时,如果其 hessian矩阵 H H H 是半正定的( H ⩾ 0 H \geqslant 0 H0),那么 f f f 是凸函数;
  • 如果 f ′ ′ ( x ) ⩾ 0 f''(x) \geqslant 0 f(x)0 或者 H ⩾ 0 H \geqslant 0 H0,那么 f f f 是严格凸函数。

Jensen不等式 表述如下:

如果 f f f 是凸函数, X X X 是随机变量,那么:
E [ f ( X ) ] ⩾ f ( E [ X ] ) E[f(X)] \geqslant f(E[X]) E[f(X)]f(E[X])

也即:函数的期望大于等于期望的函数

  • 特别地,如果 f f f 是严格凸函数,当且仅当 P ( X = E [ X ] ) = 1 P(X = E[X]) = 1 P(X=E[X])=1,即 X X X 是常量时,上式取等号

在这里插入图片描述

f f f 是凹函数,不等号方向反向即可,即 E [ f ( x ) ] ⩽ f ( E [ X ] ) E[f(x)] \leqslant f(E[X]) E[f(x)]f(E[X])

四、三硬币模型 EM算法 求解

在前面我们提到了三硬币模型,这里我们给出具体的计算过程,以及Python代码实现

首先前面我们得到了:

对数似然:

θ M L E = a r g max ⁡ θ l o g   p ( X ∣ θ ) \theta_{MLE} = arg \max_\theta log \ p(X|\theta) θMLE=argθmaxlog p(Xθ)

EM算法 是通过迭代求 L ( θ ) = l o g   p ( X ∣ θ ) \mathcal{L}(\theta) = log \ p(X|\theta) L(θ)=log p(Xθ)的极大似然估计。每次迭代包含两步:

E步:求期望;M步:求极大化。

1、使用 EM算法 求解
  • 符号标记:
  1. x j x_j xj 为第 j j j 次实验的观测,只有两个取值0/1;
  2. Z Z Z 为隐变量,表示抛硬币 A A A 出现的结果,该变量只有两个取值 0/1;
  3. z j z_j zj 为第 j j j 次实验时,抛硬币 A A A 出现的结果,同样的, z j = 1 z_j=1 zj=1 表示硬币 A A A 抛出正面;
  4. θ \theta θ 表示模型参数集合 π , p , q \pi,p,q πpq
  5. θ ( i ) \theta^{(i)} θ(i) 为第 i i i 次迭代时, π , p , q \pi,p,q πpq 的估计值。
  • E步:

完全数据的对数似然函数为:
l o g ( p ( X , Z ∣ θ ) ) = l o g ( ∏ j = 1 n p ( x j , z j ∣ θ ) ) = ∑ j = 1 n l o g ( p ( x j , z j ∣ θ ) ) log(p(X,Z|\theta)) = log (\prod_{j=1}^n p(x_j,z_j|\theta)) \\ = \sum_{j=1}^nlog(p(x_j,z_j|\theta)) log(p(X,Zθ))=log(j=1np(xj,zjθ))=j=1nlog(p(xj,zjθ))

期望为:

E Z ∣ X , θ ( i ) [ l o g ( p ( X , Z ∣ θ ) ) ] = ∑ j = 1 n ∑ z j [ p ( z j ∣ x j , θ ( i ) ) l o g ( p ( x j , z j ∣ θ ) ) ] E_{Z|X,\theta^{(i)}}[log(p(X,Z|\theta)) ]=\sum_{j=1}^n\sum_{z_j}[p(z_j|x_j,\theta^{(i)})log(p(x_j,z_j|\theta))] EZX,θ(i)[log(p(X,Zθ))]=j=1nzj[p(zjxj,θ(i))log(p(xj,zjθ))]
= ∑ j = 1 n [ [ p ( z j = 1 ∣ x j , θ ( i ) ) l o g ( p ( x j , z j = 1 ∣ θ ) ) ] + [ p ( z j = 0 ∣ x j , θ ( i ) ) l o g ( p ( x j , z j = 0 ∣ θ ) ) ] ] =\sum_{j=1}^n\Big[[p(z_j=1|x_j,\theta^{(i)})log(p(x_j,z_j=1|\theta))]+[p(z_j=0|x_j,\theta^{(i)})log(p(x_j,z_j=0|\theta))]\Big] =j=1n[[p(zj=1xj,θ(i))log(p(xj,zj=1θ))]+[p(zj=0xj,θ(i))log(p(xj,zj=0θ))]]

  • 上式中 z j z_j zj 只有两个取值;

  • 对于后验概率 p ( z j ∣ x j ; θ ( i ) ) p(z_j|x_j;\theta^{(i)}) p(zjxj;θ(i)),这里先求 z j = 1 z_j=1 zj=1 的情况, z j = 0 z_j=0 zj=0 的情况类似:
    μ j ( i + 1 ) = p ( z j = 1 ∣ x j ; θ ( i ) ) \mu_j^{(i+1)} = p(z_j=1|x_j;\theta^{(i)}) μj(i+1)=p(zj=1xj;θ(i))
    = p ( x j ∣ z j = 1 ) p ( z j = 1 ) p ( x j ) = \frac{p(x_j|z_j=1)p(z_j=1)}{ p(x_j)} =p(xj)p(xjzj=1)p(zj=1)

  • 上式用到贝叶斯公式:
    p ( A ∣ B ) = p ( B ∣ A ) p ( A ) p ( B ) p(A|B) = \frac{p(B|A)p(A)}{p(B)} p(AB)=p(B)p(BA)p(A)

  • 又:
    p ( x j ) = ∑ z j p ( x j , z j ) p(x_j) = \sum_{z_j}p(x_j,z_j) p(xj)=zjp(xj,zj)

  • 所以上式:
    = p ( x j ∣ z j = 1 ) p ( z j = 1 ) ∑ z j p ( x j , z j ) = \frac{p(x_j|z_j=1)p(z_j=1)}{ \sum_{z_j}p(x_j,z_j)} =zjp(xj,zj)p(xjzj=1)p(zj=1)
    = p ( x j ∣ z j = 1 ) p ( z j = 1 ) p ( x j , z j = 1 ) + p ( x j , z j = 0 ) = \frac{p(x_j|z_j=1)p(z_j=1)}{ p(x_j,z_j=1)+p(x_j,z_j=0)} =p(xj,zj=1)+p(xj,zj=0)p(xjzj=1)p(zj=1)
    μ j ( i + 1 ) = ( p ( i ) ) x j ( 1 − p ( i ) ) ( 1 − x j ) × π ( i ) ( p ( i ) ) x j ( 1 − p ( i ) ) ( 1 − x j ) × π ( i ) + ( q ( i ) ) x j ( 1 − q ( i ) ) ( 1 − x j ) × ( 1 − π ( i ) ) \mu_j^{(i+1)}=\frac{(p^{(i)})^{x_j}(1-p^{(i)})^{(1-x_j)} \times \pi^{(i)}}{(p^{(i)})^{x_j}(1-p^{(i)})^{(1-x_j)} \times \pi^{(i)}+(q^{(i)})^{x_j}(1-q^{(i)})^{(1-x_j)} \times (1-\pi^{(i)})} μj(i+1)=(p(i))xj(1p(i))(1xj)×π(i)+(q(i))xj(1q(i))(1xj)×(1π(i))(p(i))xj(1p(i))(1xj)×π(i)

  • 其实,上式也就是在模型参数 θ ( i ) \theta^{(i)} θ(i) 下,观测数据 x j x_j xj 来自硬币 B B B 的概率,那么来自 硬币 C C C 的概率可以表示为:
    1 − μ j ( i + 1 ) 1- \mu_j^{(i+1)} 1μj(i+1)

  • 对于联合概率 p ( x j , z j ∣ θ ) p(x_j,z_j|\theta) p(xj,zjθ)
    p ( x j , z j = 1 ∣ θ ) = p ( x j ∣ z j = 1 , θ ) p ( z j = 1 ∣ θ ) p(x_j,z_j=1|\theta) = p(x_j|z_j=1,\theta)p(z_j=1|\theta) p(xj,zj=1θ)=p(xjzj=1,θ)p(zj=1θ)
    = π p x j ( 1 − p ) 1 − x j =\pi p^{x_j}(1-p)^{1-x_j} =πpxj(1p)1xj

  • 上式用到:
    p ( B A ) = p ( A B ) = p ( B ∣ A ) p ( A ) p(BA) =p(AB)= p(B|A)p(A) p(BA)=p(AB)=p(BA)p(A)

  • 同样:
    p ( x j , z j = 0 ∣ θ ) = p ( x j ∣ z j = 1 , θ ) p ( z j = 0 ∣ θ ) p(x_j,z_j=0|\theta) = p(x_j|z_j=1,\theta)p(z_j=0|\theta) p(xj,zj=0θ)=p(xjzj=1,θ)p(zj=0θ)
    = ( 1 − π ) q x j ( 1 − q ) 1 − x j =(1-\pi) q^{x_j}(1-q)^{1-x_j} =(1π)qxj(1q)1xj

所以最终结果为:

E Z ∣ X , θ ( i ) [ l o g ( p ( X , Z ∣ θ ) ) ] E_{Z|X,\theta^{(i)}}[log(p(X,Z|\theta)) ] EZX,θ(i)[log(p(X,Zθ))]
= ∑ j = 1 n [ [ p ( z j = 1 ∣ x j , θ ( i ) ) l o g ( p ( x j , z j = 1 ∣ θ ) ) ] + [ p ( z j = 0 ∣ x j , θ ( i ) ) l o g ( p ( x j , z j = 0 ∣ θ ) ) ] ] =\sum_{j=1}^n\Big[[p(z_j=1|x_j,\theta^{(i)})log(p(x_j,z_j=1|\theta))]+[p(z_j=0|x_j,\theta^{(i)})log(p(x_j,z_j=0|\theta))]\Big] =j=1n[[p(zj=1xj,θ(i))log(p(xj,zj=1θ))]+[p(zj=0xj,θ(i))log(p(xj,zj=0θ))]]
= ∑ j = 1 n [ [ μ j ( i + 1 ) × l o g ( π p x j ( 1 − p ) 1 − x j ] + [ ( 1 − μ j ( i + 1 ) ) × l o g ( ( 1 − π ) q x j ( 1 − q ) 1 − x j ] ] =\sum_{j=1}^n\Big[[\mu_j^{(i+1)} \times log(\pi p^{x_j}(1-p)^{1-x_j}]+[(1- \mu_j^{(i+1)})\times log((1-\pi) q^{x_j}(1-q)^{1-x_j}]\Big] =j=1n[[μj(i+1)×log(πpxj(1p)1xj]+[(1μj(i+1))×log((1π)qxj(1q)1xj]]

令:

f = ∑ j = 1 n [ [ μ j ( i + 1 ) × l o g ( π p x j ( 1 − p ) 1 − x j ] + [ ( 1 − μ j ( i + 1 ) ) × l o g ( ( 1 − π ) q x j ( 1 − q ) 1 − x j ] ] f = \sum_{j=1}^n\Big[[\mu_j^{(i+1)} \times log(\pi p^{x_j}(1-p)^{1-x_j}]+[(1- \mu_j^{(i+1)})\times log((1-\pi) q^{x_j}(1-q)^{1-x_j}]\Big] f=j=1n[[μj(i+1)×log(πpxj(1p)1xj]+[(1μj(i+1))×log((1π)qxj(1q)1xj]]

  • M步:

对上面的期望最终表达式求偏导,并令偏导数为0,来估计每个参数:

  • (1)估计参数 π \pi π

π \pi π 求偏导,其中 μ ( i + 1 ) \mu^{(i+1)} μ(i+1) 为常数:

∂ f ∂ π = ∑ j = 1 n { μ j ( i + 1 ) × 1 π − ( 1 − μ j ( i + 1 ) ) × 1 1 − π } \frac{\partial f}{\partial \pi} = \sum_{j=1}^n \Big\{\mu_j^{(i+1)} \times \frac{1}{\pi} - (1- \mu_j^{(i+1)}) \times \frac{1}{1 - \pi}\Big\} πf=j=1n{μj(i+1)×π1(1μj(i+1))×1π1}
= ∑ j = 1 n { π − μ j ( i + 1 ) π ( 1 − π ) } =\sum_{j=1}^n\Big\{\frac{\pi - \mu_j^{(i+1)}}{\pi(1-\pi)}\Big\} =j=1n{π(1π)πμj(i+1)}
= n π − ∑ j = 1 n μ j ( i + 1 ) π ( 1 − π ) = 0 = \frac{n\pi - \sum_{j=1}^n \mu_j^{(i+1)}}{\pi(1-\pi)}=0 =π(1π)nπj=1nμj(i+1)=0
求得 π \pi π 的估计为:
π = 1 n ∑ j = 1 n μ j ( i + 1 ) \pi = \frac{1}{n} \sum_{j=1}^n \mu_j^{(i+1)} π=n1j=1nμj(i+1)

  • (2)估计参数 p p p

p p p 求偏导:
∂ f ∂ p = ∑ j = 1 n μ j ( i + 1 ) × π { x j p x j − 1 ( 1 − p ) 1 − x j + p x j [ − ( 1 − x j ) ( 1 − p ) − x j ] } π p x j ( 1 − p ) 1 − x j \frac{\partial f}{\partial p} =\sum_{j=1}^n\mu_j^{(i+1)} \times \frac{\pi\Big\{x_jp^{x_j-1}(1-p)^{1-x_j} + p^{x_j}[-(1-x_j)(1-p)^{-x_j}]\Big\}}{\pi p^{x_j}(1-p)^{1-x_j}} pf=j=1nμj(i+1)×πpxj(1p)1xjπ{xjpxj1(1p)1xj+pxj[(1xj)(1p)xj]}
= ∑ j = 1 n μ j ( i + 1 ) × { x j p − 1 + [ − ( 1 − x j ) ( 1 − p ) − 1 ] } =\sum_{j=1}^n\mu_j^{(i+1)} \times \Big\{x_j p^{-1}+[-(1-x_j)(1-p)^{-1}]\Big\} =j=1nμj(i+1)×{xjp1+[(1xj)(1p)1]}
= ∑ j = 1 n μ j ( i + 1 ) × { x j p − 1 − x j 1 − p } =\sum_{j=1}^n\mu_j^{(i+1)} \times \Big\{\frac{x_j}{p}-\frac{1-x_j}{1-p}\Big\} =j=1nμj(i+1)×{pxj1p1xj}
= ∑ j = 1 n μ j ( i + 1 ) × { x j ( 1 − p ) + p ( x j − 1 ) p ( 1 − p ) } =\sum_{j=1}^n\mu_j^{(i+1)} \times \Big\{\frac{x_j(1-p)+p(x_j-1)}{p(1-p)}\Big\} =j=1nμj(i+1)×{p(1p)xj(1p)+p(xj1)}
= ∑ j = 1 n μ j ( i + 1 ) × { x j − p p ( 1 − p ) } = 0 =\sum_{j=1}^n\mu_j^{(i+1)} \times \Big\{\frac{x_j-p}{p(1-p)}\Big\} = 0 =j=1nμj(i+1)×{p(1p)xjp}=0

求得 p p p 的估计为:
p = ∑ j = 1 n μ j ( i + 1 ) x j ∑ j = 1 n μ j ( i + 1 ) p = \frac{\sum_{j=1}^n \mu_j^{(i+1)}x_j}{\sum_{j=1}^n \mu_j^{(i+1)}} p=j=1nμj(i+1)j=1nμj(i+1)xj

  • (3)估计参数 q q q

q q q 求偏导:

∂ f ∂ q = ∑ j = 1 n ( 1 − μ j ( i + 1 ) ) × ( 1 − π ) { x j q x j − 1 ( 1 − q ) 1 − x j + q x j [ − ( 1 − x j ) ( 1 − q ) − x j ] } ( 1 − π ) q x j ( 1 − q ) 1 − x j \frac{\partial f}{\partial q} = \sum_{j=1}^n(1-\mu_j^{(i+1)})\times\frac{(1-\pi)\Big\{x_jq^{x_j-1}(1-q)^{1-x_j}+q^{x_j}[-(1-x_j)(1-q)^{-x_j}]\Big\}}{(1-\pi)q^{x_j}(1-q)^{1-x_j}} qf=j=1n(1μj(i+1))×(1π)qxj(1q)1xj(1π){xjqxj1(1q)1xj+qxj[(1xj)(1q)xj]}
= ∑ j = 1 n ( 1 − μ j ( i + 1 ) ) × [ x j q − 1 + ( x j − 1 ) ( 1 − q ) − 1 ] =\sum_{j=1}^n(1-\mu_j^{(i+1)})\times \Big[x_jq^{-1}+(x_j-1)(1-q)^{-1}\Big] =j=1n(1μj(i+1))×[xjq1+(xj1)(1q)1]
= ∑ j = 1 n ( 1 − μ j ( i + 1 ) ) × [ x j q + x j − 1 1 − q ] =\sum_{j=1}^n(1-\mu_j^{(i+1)})\times\Big[\frac{x_j}{q}+\frac{x_j-1}{1-q}\Big] =j=1n(1μj(i+1))×[qxj+1qxj1]
= ∑ j = 1 n ( 1 − μ j ( i + 1 ) ) × x j − q q ( 1 − q ) = 0 =\sum_{j=1}^n(1-\mu_j^{(i+1)})\times \frac{x_j-q}{q(1-q)}=0 =j=1n(1μj(i+1))×q(1q)xjq=0

求得 q q q 的估计为:

q = ∑ j = 1 n ( 1 − μ j ( i + 1 ) ) x j ∑ j = 1 n ( 1 − μ j ( i + 1 ) ) q = \frac{\sum_{j=1}^n (1-\mu_j^{(i+1)})x_j}{\sum_{j=1}^n (1-\mu_j^{(i+1)})} q=j=1n(1μj(i+1))j=1n(1μj(i+1))xj

2、具体数字计算
  • 假设模型参数的初始值为:

π ( 0 ) = 0.5 , p ( 0 ) = 0.5 , q ( 0 ) = 0.5 \pi^{(0)}=0.5,p^{(0)}=0.5,q^{(0)}=0.5 π(0)=0.5,p(0)=0.5,q(0)=0.5

  • μ j ( i + 1 ) \mu_j^{(i+1)} μj(i+1)公式,对 x j = 1 x_j=1 xj=1 x j = 0 x_j=0 xj=0 均有:

μ j ( 1 ) = 0.5 \mu_j^{(1)} = 0.5 μj(1)=0.5

  • 根据参数迭代公式,可得:

π ( 1 ) = 0.5 , p ( 1 ) = 0.6 , q ( 1 ) = 0.6 \pi^{(1)}=0.5,p^{(1)}=0.6,q^{(1)}=0.6 π(1)=0.5,p(1)=0.6,q(1)=0.6

  • 在根据更新后的参数,更新 μ j ( 2 ) \mu_j^{(2)} μj(2)

μ j ( 2 ) = 0.5 \mu_j^{(2)}=0.5 μj(2)=0.5

  • 继续迭代:

π ( 2 ) = 0.5 , p ( 2 ) = 0.6 , q ( 2 ) = 0.6 \pi^{(2)}=0.5,p^{(2)}=0.6,q^{(2)}=0.6 π(2)=0.5,p(2)=0.6,q(2)=0.6

此时,参数不发生改变,所以得到模型参数的极大似然估计为:

π ^ = 0.5 , p ^ = 0.6 , q ^ = 0.6 \hat{\pi}=0.5,\hat{p}=0.6,\hat{q}=0.6 π^=0.5,p^=0.6,q^=0.6

3、Python代码实现

代码可见:01_三硬币模型EM算法求解

运行结果:

init prob:0.5, 0.5, 0.5
1/10  pro_a:0.500, pro_b:0.600, pro_c:0.600
2/10  pro_a:0.500, pro_b:0.600, pro_c:0.600
init prob:0.4, 0.6, 0.7
1/10  pro_a:0.406, pro_b:0.537, pro_c:0.643
2/10  pro_a:0.406, pro_b:0.537, pro_c:0.643

由运行结果可见:

  • 不同初始化值会得到不同的参数估计值,也就是说 EM算法 与初值的选择有关,选择不同的初值可能得到不同的参数估计值。

五、EM算法 在高斯混合模型中的应用

在这里插入图片描述

1、单个高斯分布

\quad\quad 如上左图,假如我们有一些数据,这些数据来自同一个高斯分布(独立同分布),那么我们如何根据这些数据估计出这个高斯分布的参数呢?我们知道只要知道高斯分布的参数 θ = { μ , σ 2 } \theta=\{\mu,\sigma^2\} θ={μ,σ2}就能确定此高斯分布。

\quad\quad 前面第一大点:最大似然估计中第4点的例子解释,便可以根据观测数据来计算出未知的模型参数,从而确定数据的分布。

2、高斯混合模型

\quad\quad 如上右图中的红色曲线,是一个高斯混合模型,此处只画了两个高斯分布,可以是多个高斯分布。

\quad\quad 如果我们知道每一个数据属于哪一个高斯分布,就会很容易求解,但是我们不可能都知道的,这时随便一个数据点,我们应该如何判断它是哪个高斯分布产生的呢?


假定高斯混合模型 (Gaussian Mixture Model, GMM)是指由多个高斯模型 线性叠加 混合而成,那么概率密度函数可以表述如下:

这里我们引入 α k \alpha_k αk表示属于第 k k k个高斯分布的权重,并满足 ∑ k = 1 K α k = 1 \sum_{k=1}^{K} \alpha_k = 1 k=1Kαk=1

这样我们可以得到:

p ( X ∣ θ ) = ∑ k = 1 K α k N ( μ k , σ k 2 ) ∑ k = 1 K α k = 1 p(X|\theta) = \sum_{k=1}^{K} \alpha_k \mathcal{N}(\mu_k, \sigma^2_k) \\ \sum_{k=1}^{K} \alpha_k= 1 p(Xθ)=k=1KαkN(μk,σk2)k=1Kαk=1

其中 N ( μ k , σ k 2 ) \mathcal{N}(\mu_k, \sigma^2_k) N(μk,σk2)是高斯分布, α k \alpha_k αk是系数

给出定义:

高斯混合模型是指具有如下形式的概率分布模型:
p ( x ∣ θ ) = ∑ k = 1 K α k ϕ ( x ∣ θ k ) p(x|\theta) = \sum_{k=1}^{K}\alpha_k \phi(x|\theta_k) p(xθ)=k=1Kαkϕ(xθk)
其中, α k \alpha_k αk是系数, α k ⩾ 0 ∑ k = 1 K α k = 1 \alpha_k\geqslant 0 \sum_{k=1}^{K} \alpha_k= 1 αk0k=1Kαk=1 ϕ ( x ∣ θ k ) \phi(x|\theta_k) ϕ(xθk)是高斯分布密度, θ k = ( μ k , σ k 2 ) \theta_k = (\mu_k, \sigma^2_k) θk=(μk,σk2)
ϕ ( x ∣ θ k ) = 1 2 π σ k e x p ( − ( x − μ k ) 2 2 σ k 2 ) \phi(x|\theta_k) = \frac{1}{\sqrt{2\pi}\sigma_k}exp(-\frac{(x - \mu_k)^2}{2\sigma_k^2}) ϕ(xθk)=2π σk1exp(2σk2(xμk)2)
称为第 k k k个分模型。

3、高斯混合模型参数估计的 E M EM EM算法

假设观测数据 x 1 , x 2 , . . . , x N x_1,x_2,...,x_N x1,x2,...,xN由高斯混合模型生成:
p ( x ∣ θ ) = ∑ k = 1 K α k ϕ ( x ∣ θ k ) p(x|\theta) = \sum_{k=1}^K\alpha_k \phi(x|\theta_k) p(xθ)=k=1Kαkϕ(xθk)
其中, θ = ( α 1 , α 2 , . . , α k ; θ 1 , θ 2 , . . , θ k ) \theta = (\alpha_1,\alpha_2,..,\alpha_k;\theta_1,\theta_2,..,\theta_k) θ=(α1,α2,..,αk;θ1,θ2,..,θk),我们用 E M EM EM算法估计高斯混合模型的参数 θ \theta θ.

(1)明确隐变量,写出完全数据的对数似然函数

我们设想数据是这样产生的:

  • 首先依概率 α k \alpha_k αk 选择第 k k k 个高斯分布模型 ϕ ( x ∣ θ k ) \phi(x|\theta_k) ϕ(xθk)
  • 然后依第 k k k 个分模型的概率分布 ϕ ( x ∣ θ k ) \phi(x|\theta_k) ϕ(xθk) 生成观测数据 x j x_j xj,此时观测数据 x j x_j xj 是已知的;
  • 反映观测数据 x j x_j xj来自第 k k k个分模型的数据是未知的, k = 1 , 2 , . . . , K k = 1,2,...,K k=1,2,...,K,以隐变量 γ j k \gamma_{jk} γjk 表示,其定义如下:
    γ j k = { 1 , 第 j 个 观 测 来 自 第 k 个 分 模 型 0 , 否 则 \gamma_{jk}=\begin{cases} 1,\quad 第j个观测来自第k个分模型 \\ 0, \quad 否则 \\ \end{cases} γjk={1,jk0,
    j = 1 , 2 , . . . , N ; k = 1 , 2 , . . . , K j = 1,2,...,N; k = 1,2,...,K j=1,2,...,N;k=1,2,...,K

有了观测数据 x j x_j xj及未观测数据 γ j k \gamma_{jk} γjk,那么完全数据是: ( x j , γ j 1 , γ j 2 , . . . , γ j K ) , j = 1 , 2 , . . . , N (x_j,\gamma_{j1},\gamma_{j2},...,\gamma_{jK}), j = 1,2,...,N (xj,γj1,γj2,...,γjK)j=1,2,...,N

于是,可以写出完全数据的似然函数:
p ( x , γ ∣ θ ) = ∏ j = 1 N p ( x j , γ j 1 , γ j 2 , . . . , γ j K ∣ θ ) p(x,\gamma|\theta) = \prod_{j=1}^Np(x_j,\gamma_{j1},\gamma_{j2},...,\gamma_{jK}|\theta) p(x,γθ)=j=1Np(xj,γj1,γj2,...,γjKθ)
= ∏ k = 1 K ∏ j = 1 N [ α k ϕ ( x j ∣ θ k ) ] γ j k = \prod_{k=1}^K\prod_{j=1}^N[\alpha_k \phi(x_j|\theta_k)]^{\gamma_{jk}} =k=1Kj=1N[αkϕ(xjθk)]γjk
= ∏ k = 1 K α k n k ∏ j = 1 N [ ϕ ( x j ∣ θ k ) ] γ j k = \prod_{k=1}^K\alpha_k^{n_k}\prod_{j=1}^N[\phi(x_j|\theta_k)]^{\gamma_{jk}} =k=1Kαknkj=1N[ϕ(xjθk)]γjk
= ∏ k = 1 K α k n k ∏ j = 1 N [ 1 2 π σ k e x p ( − ( x j − μ k ) 2 2 σ k 2 ) ] γ j k = \prod_{k=1}^K\alpha_k^{n_k}\prod_{j=1}^N[\frac{1}{\sqrt{2\pi}\sigma_k}exp(-\frac{(x_j - \mu_k)^2}{2\sigma_k^2})]^{\gamma_{jk}} =k=1Kαknkj=1N[2π σk1exp(2σk2(xjμk)2)]γjk
式中: n k = ∑ j = 1 N γ j k , ∑ k = 1 K n k = N n_k = \sum_{j=1}^N \gamma_{jk},\sum_{k=1}^Kn_k = N nk=j=1Nγjk,k=1Knk=N

那么,对数似然函数为:

l o g   p ( x , γ ∣ θ ) = ∑ k = 1 K n k l o g   α k + ∑ j = 1 N γ j k [ l o g ( 1 2 π ) − l o g σ k − 1 2 σ k 2 ( x j − μ k ) 2 ] log \ p(x,\gamma|\theta) = \sum_{k=1}^K n_k log \ \alpha_k + \sum_{j=1}^N \gamma_{jk}\Big[log\Big(\frac{1}{\sqrt{2\pi}}\Big)-log \sigma_k - \frac{1}{2\sigma^2_k}(x_j-\mu_k)^2\Big] log p(x,γθ)=k=1Knklog αk+j=1Nγjk[log(2π 1)logσk2σk21(xjμk)2]

(2) E M EM EM算法 E E E步:确定Q函数
Q ( θ , θ ( i ) ) = E [ l o g   p ( x , γ ∣ θ ) ∣ x , θ ( i ) ] Q(\theta, \theta^{(i)}) = E[log \ p(x,\gamma | \theta)|x,\theta^{(i)}] Q(θ,θ(i))=E[log p(x,γθ)x,θ(i)]
= E { ∑ k = 1 K n k l o g   α k + ∑ j = 1 N γ j k [ l o g ( 1 2 π ) − l o g σ k − 1 2 σ k 2 ( x j − μ k ) 2 ] } = E\Big\{ \sum_{k=1}^K n_k log \ \alpha_k + \sum_{j=1}^N \gamma_{jk}\Big[log\Big(\frac{1}{\sqrt{2\pi}}\Big)-log \sigma_k - \frac{1}{2\sigma^2_k}(x_j-\mu_k)^2\Big]\Big\} =E{k=1Knklog αk+j=1Nγjk[log(2π 1)logσk2σk21(xjμk)2]}
= E { ∑ k = 1 K ( ∑ j = 1 N γ j k ) l o g   α k + ( ∑ j = 1 N γ j k ) [ l o g ( 1 2 π ) − l o g σ k − 1 2 σ k 2 ( x j − μ k ) 2 ] } = E\Big\{ \sum_{k=1}^K (\sum_{j=1}^N \gamma_{jk}) log \ \alpha_k + (\sum_{j=1}^N \gamma_{jk})\Big[log\Big(\frac{1}{\sqrt{2\pi}}\Big)-log \sigma_k - \frac{1}{2\sigma^2_k}(x_j-\mu_k)^2\Big]\Big\} =E{k=1K(j=1Nγjk)log αk+(j=1Nγjk)[log(2π 1)logσk2σk21(xjμk)2]}
= ∑ k = 1 K ( ∑ j = 1 N E γ j k ) l o g   α k + ( ∑ j = 1 N E γ j k ) [ l o g ( 1 2 π ) − l o g σ k − 1 2 σ k 2 ( x j − μ k ) 2 ] = \sum_{k=1}^K (\sum_{j=1}^N E\gamma_{jk}) log \ \alpha_k + (\sum_{j=1}^N E\gamma_{jk})\Big[log\Big(\frac{1}{\sqrt{2\pi}}\Big)-log \sigma_k - \frac{1}{2\sigma^2_k}(x_j-\mu_k)^2\Big] =k=1K(j=1NEγjk)log αk+(j=1NEγjk)[log(2π 1)logσk2σk21(xjμk)2]
= ∑ k = 1 K ( ∑ j = 1 N E γ j k ) l o g   α k + ( ∑ j = 1 N E γ j k ) [ l o g ( 1 2 π ) − l o g σ k − 1 2 σ k 2 ( x j − μ k ) 2 ] = \sum_{k=1}^K ( \sum_{j=1}^N E\gamma_{jk}) log \ \alpha_k + (\sum_{j=1}^N E\gamma_{jk})\Big[log\Big(\frac{1}{\sqrt{2\pi}}\Big)-log \sigma_k - \frac{1}{2\sigma^2_k}(x_j-\mu_k)^2\Big] =k=1K(j=1NEγjk)log αk+(j=1NEγjk)[log(2π 1)logσk2σk21(xjμk)2]
这里需要计算 E ( γ j k ∣ x , θ ) E(\gamma_{jk} | x, \theta) E(γjkx,θ),记为 γ j k ^ \hat{\gamma_{jk}} γjk^
γ j k ^ = E ( γ j k ∣ x , θ ) = p ( γ j k = 1 ∣ x , θ ) \hat{\gamma_{jk}} = E(\gamma_{jk} | x, \theta) = p(\gamma_{jk} = 1 |x,\theta) γjk^=E(γjkx,θ)=p(γjk=1x,θ)
= p ( γ j k = 1 , x j ∣ θ ) ∑ k = 1 K p ( γ j k = 1 , x j ∣ θ ) = \frac{p(\gamma_{jk} = 1, x_j |\theta)}{\sum_{k=1}^Kp(\gamma_{jk}=1,x_j | \theta)} =k=1Kp(γjk=1,xjθ)p(γjk=1,xjθ)
= p ( x j ∣ γ j k = 1 , θ ) p ( γ j k = 1 ∣ θ ) ∑ k = 1 K p ( x j ∣ γ j k = 1 , θ ) p ( γ j k = 1 ∣ θ ) = \frac{p(x_j|\gamma_{jk} = 1,\theta)p(\gamma_{jk}=1|\theta)}{\sum_{k=1}^Kp(x_j|\gamma_{jk} = 1,\theta)p(\gamma_{jk}=1|\theta)} =k=1Kp(xjγjk=1,θ)p(γjk=1θ)p(xjγjk=1,θ)p(γjk=1θ)
= α k ϕ ( x j ∣ θ k ) ∑ k = 1 K α k ϕ ( x j ∣ θ k ) , j = 1 , 2 , . . . , N ; k = 1 , 2 , . . . , K = \frac{\alpha_k \phi(x_j|\theta_k)}{\sum_{k=1}^K \alpha_k \phi(x_j|\theta_k)}, j = 1,2,...,N; k = 1,2,...,K =k=1Kαkϕ(xjθk)αkϕ(xjθk),j=1,2,...,N;k=1,2,...,K

γ j k ^ \hat{\gamma_{jk}} γjk^ 是在当前模型参数下第 j j j 个观测数据来自第 k k k 个分模型的概率,称为分模型 k k k 对观测数据 x j x_j xj 的响应度。

γ j k ^ = E γ j k 及 n k = ∑ j = 1 N E γ j k \hat{\gamma_{jk}} = E\gamma_{jk} 及 n_k = \sum_{j=1}^NE\gamma_{jk} γjk^=Eγjknk=j=1NEγjk代入之前式子即得:

Q ( θ , θ ( i ) ) = ∑ k = 1 K n k l o g   α k + ∑ j = 1 N γ j k ^ [ l o g ( 1 2 π ) − l o g σ k − 1 2 σ k 2 ( x j − μ k ) 2 ] Q(\theta, \theta^{(i)}) =\sum_{k=1}^K n_klog \ \alpha_k + \sum_{j=1}^N \hat{\gamma_{jk}} \Big[ log\Big(\frac{1}{\sqrt{2\pi}}\Big)-log \sigma_k - \frac{1}{2\sigma^2_k}(x_j-\mu_k)^2\Big] Q(θ,θ(i))=k=1Knklog αk+j=1Nγjk^[log(2π 1)logσk2σk21(xjμk)2]

(3) E M EM EM算法 M M M步:

迭代的 M M M 步是求函数 Q ( θ , θ ( i ) ) Q(\theta, \theta^{(i)}) Q(θ,θ(i)) θ \theta θ 的极大值,即求新一轮迭代的模型参数:
θ ( i + 1 ) = a r g max ⁡ θ Q ( θ , θ ( i ) ) \theta^{(i+1)} = arg \max_\theta Q(\theta, \theta^{(i)}) θ(i+1)=argθmaxQ(θ,θ(i))

μ k ^ , σ k 2 ^ \hat{\mu_k}, \hat{\sigma^2_k} μk^,σk2^只需要将Q函数对 μ k , σ k 2 \mu_k,\sigma^2_k μk,σk2求偏导并令为0,即可得到;求 α k ^ \hat{\alpha_k} αk^是在 ∑ i = k K α k = 1 \sum_{i=k}^{K} \alpha_k= 1 i=kKαk=1条件下求偏导数并令为0得到的,用到拉格朗日乘子法。

  • μ k \mu_k μk 的估计 μ k ^ \hat{\mu_k} μk^ 为(除去和 μ k \mu_k μk 无关的(视作常数),求偏导,并令偏导为0):

Q ( θ , θ ( i ) ) = − ∑ j = 1 N γ j k ^ 1 2 σ k 2 ( x j − μ k ) 2 + c Q(\theta, \theta^{(i)}) = - \sum_{j=1}^N \hat{\gamma_{jk}}\frac{1}{2\sigma^2_k}(x_j-\mu_k)^2+c Q(θ,θ(i))=j=1Nγjk^2σk21(xjμk)2+c

∂ ∂ μ k Q = − ∑ j = 1 N γ j k ^ 1 σ k 2 ( x j − μ k ) = 0 \frac{\partial}{\partial \mu_k} Q = - \sum_{j=1}^N \hat{\gamma_{jk}}\frac{1}{\sigma^2_k}(x_j-\mu_k)=0 μkQ=j=1Nγjk^σk21(xjμk)=0

μ k ^ = ∑ j = 1 N γ j k ^ x j ∑ j = 1 N γ j k ^ , k = 1 , 2 , . . . , K \hat{\mu_k} = \frac{\sum_{j=1}^N \hat{\gamma_{jk}}x_j}{\sum_{j=1}^N \hat{\gamma_{jk}}}, k = 1,2,...,K μk^=j=1Nγjk^j=1Nγjk^xj,k=1,2,...,K

  • 同理, σ k 2 \sigma^2_k σk2 的估计 σ k 2 ^ \hat{\sigma^2_k} σk2^ 为:

Q ( θ , θ ( i ) ) = ∑ j = 1 N γ j k ^ [ − l o g σ k − 1 2 σ k 2 ( x j − μ k ) 2 ] + c Q(\theta, \theta^{(i)}) = \sum_{j=1}^N \hat{\gamma_{jk}}\Big[- log \sigma_k - \frac{1}{2\sigma^2_k}(x_j-\mu_k)^2\Big] +c Q(θ,θ(i))=j=1Nγjk^[logσk2σk21(xjμk)2]+c

∂ ∂ σ k Q = ∑ j = 1 N γ j k ^ [ − 1 σ k + 1 σ k 3 ( x j − μ k ) 2 ] = 0 \frac{\partial}{\partial \sigma_k} Q= \sum_{j=1}^N \hat{\gamma_{jk}}\Big[-\frac{1}{\sigma_k}+ \frac{1}{\sigma_k^3}(x_j-\mu_k)^2\Big] =0 σkQ=j=1Nγjk^[σk1+σk31(xjμk)2]=0

σ k 2 ^ = ∑ j = 1 N γ j k ^ ( x j − μ k ) 2 ∑ j = 1 N γ j k ^ , k = 1 , 2 , . . . , K \hat{\sigma_k^2 }= \frac{\sum_{j=1}^N \hat{\gamma_{jk}}(x_j - \mu_k)^2}{\sum_{j=1}^N \hat{\gamma_{jk}}}, k= 1,2,...,K σk2^=j=1Nγjk^j=1Nγjk^(xjμk)2,k=1,2,...,K

  • α k \alpha_k αk 的估计为 α k ^ \hat{\alpha_k} αk^ 为(使用拉格朗日乘子法):

{ Q ( θ , θ ( i ) ) = ∑ k = 1 K ∑ j = 1 N γ j k l o g   α k + c s . t . ∑ k = 1 K α k = 1 \begin{cases} Q(\theta, \theta^{(i)}) =\sum_{k=1}^K \sum_{j=1}^N \gamma_{jk} log \ \alpha_k + c\\ \\ s.t. \quad \sum_{k=1}^{K} \alpha_k= 1\\ \end{cases} Q(θ,θ(i))=k=1Kj=1Nγjklog αk+cs.t.k=1Kαk=1

L ( α ) = ∑ k = 1 K ∑ j = 1 N γ j k l o g   α k + β ( ∑ k = 1 K α k − 1 ) L(\alpha) = \sum_{k=1}^K \sum_{j=1}^N \gamma_{jk} log \ \alpha_k +\beta(\sum_{k=1}^{K} \alpha_k- 1) L(α)=k=1Kj=1Nγjklog αk+β(k=1Kαk1)

∂ ∂ α l L = ∑ j = 1 N γ j l α l + β = 0 \frac{\partial}{\partial \alpha_l} L=\sum_{j=1}^N \frac{\gamma_{jl}}{\alpha_l} + \beta=0 αlL=j=1Nαlγjl+β=0

β = − ∑ j = 1 N ∑ k = 1 K γ j l = − N \beta = -\sum_{j=1}^N\sum_{k=1}^K \gamma_{jl} = -N β=j=1Nk=1Kγjl=N
α l = 1 N ∑ j = 1 N γ j l \alpha_l = \frac{1}{N}\sum_{j=1}^N\gamma_{jl} αl=N1j=1Nγjl

α k ^ = ∑ j = 1 N γ j k ^ N , k = 1 , 2 , . . . , K \hat{\alpha_k} = \frac{\sum_{j=1}^N \hat{\gamma_{jk}}}{N}, k = 1,2,...,K αk^=Nj=1Nγjk^,k=1,2,...,K
重复以上计算,直到对数似然函数值不再有明显变化为止。

六、案例

1、GMM 算法实现:使用 scikit-learn 携带的 EM算法 或者自己实现的 EM算法

sklearn库中sklearn.mixture.GaussianMixture API:

class sklearn.mixture.GaussianMixture(n_components=1, covariance_type=’full’, tol=0.001, 
	reg_covar=1e-06, max_iter=100, n_init=1, init_params=’kmeans’, weights_init=None, 
	means_init=None, precisions_init=None, random_state=None, warm_start=False, 
	verbose=0, verbose_interval=10)

sklearn.mixture.GaussianMixture在0.18版本以前是sklearn.mixture.GMM,两者的参数基本类型,这里主要介绍GaussianMixture的相关参数

属性参数:

  • n_components:混合组合的个数,默认为1, 可以理解为聚类/分类数量;
  • covariance_type:给定协方差的类型,可选: full、tied、diag、spherical,默认为full;full:每个组件都有自己的公用的协防差矩阵,tied:所有组件公用一个协方差矩阵,diag:每个组件都有自己的斜对角协方差矩阵,spherical:每个组件都有自己单独的方差值;
  • tol:默认1e-3,收敛阈值,如果在迭代过程中,平均增益小于该值的时候,EM算法结束;
  • reg_covar:协方差对角线上的非负正则化参数,默认为0;
  • max_iter:em算法的最大迭代次数,默认100;
  • n_init: 默认值1,执行初始化操作数量,该参数最好不要变动;
  • init_params:初始化权重值、均值以及精度的方法,参数可选:kmeans、random,默认kmeans, kmeans:使用kmeans算法进行初始化操作;
  • weights_init:初始化权重列表,如果没有给定,那么使用init_params参数给定的方法来进行创建,默认为None;
  • means_init:初始化均值列表,如果没有给定,那么使用init_params参数给定的方法来进行创建,默认为None;
  • precisions_init: 初始化精度列表,如果没有给定,那么使用init_params参数给定的方法来进行创建,默认为None;
  • warn_stat:默认为False,当该值为true的时候,在类似问题被多次训练的时候,可以加快收敛速度;

在这里插入图片描述

代码可见:02_GMM算法实现.py

2、GMM 算法分类

本案例主要使用身高体重为特征数据,性别为标签数据的数据集,使用 GMM 算法模型进行分类;比较不同概率选择下模型分类效果。

  • 数据格式
Sex(0女生,1男生)Height(cm)Weight(kg)
015650
117375
  • 运行结果
预测概率:
 [[2.25031842e-06 9.99997750e-01]
 [2.16136597e-06 9.99997839e-01]
 [2.07669097e-06 9.99997923e-01]
 ...
 [1.00000000e+00 6.34944402e-11]
 [1.00000000e+00 5.78303161e-11]
 [1.00000000e+00 5.26521608e-11]]

在这里插入图片描述

  • 我们知道,预测结果是属于两个类的各自的概率是多少,选择概率的大作为预测的类别。

在上图中:

  • 0.1的曲线是概率等高线,表示预测结果小于0.1的,属于红色类别(绿色);大于0.1的属于绿色类别(男生);
  • 图中可以看出,0.5的等高线就是模型的分割线;

一般默认为0.5,当然我们也可以自己设定。

代码可见:03_GMM算法分类及概率选择.py

3、GMM 不同参数选择比较

本案例主要展示 GMM 模型中,不同参数设定带来的效果比较

  • 运行结果
    在这里插入图片描述

如上图:
-BIC值越小表示模型越好

  • 当混合模型个数为 2 ,协方差类型为 full 时,模型分类效果最优
  • 一般情况下,我们都使用 full 参数

代码可见:04_GMM不同参数选择比较.py

4、EM 无监督算法分类鸢尾花数据

本案例基于鸢尾花数据,使用 EM 算法进行分类

  • 运行结果
    在这里插入图片描述

代码可见:05_EM无监督算法分类鸢尾花数据.py

  • 我们可以对比其他算法:决策树、Logistic回归、KNN

在这里插入图片描述

上图代码可见:Github05_鸢尾花数据分类_特征比较.py

在这里插入图片描述

上图代码可见:Github05_鸢尾花数据分类.py
在这里插入图片描述

上图代码可见:Github04_鸢尾花数据分类.py

七、后记

\quad\quad 至此,EM 算法就差不多介绍完了,EM 算法是学习机器学习必须要面对的算法,本篇包含了大量的公式需要认真推导理解;案例代码部分也尽可能进行了注释,针对一些数据的操作函数可以自行查阅文档,自己动手后,我相信一定可以很好地理解EM 算法,案例也帮助了我们理解EM 算法应用。

\quad\quad 博主也是边学习边整理,难免存在一些错误理解,还希望大家不吝赐教,本篇也会在后期不定期修改更正。也希望和大家多多交流,共同学习,欢迎留言交流。

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值