Machine Learning Park–EM(最大期望算法)

代码说明:

文件名说明gmm.ipynbGMM模型的EM算法实现gmm.data数据集文件

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

算法两个核心步骤:

  • E(计算期望)
  • 利用对隐藏变量的现有估计值,计算其 最大似然估计值
  • M(最大化)
  • 最大化在E步上求得的最大似然值来计算参数的值
  • M步上找到的参数估计值被 用于下一个E步骤计算中,这个过程不断交替进行。
  • 简单的一句话表示就是: 知道结果,反推条件θ \theta θ

似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。 极大似然就相当于最大可能。

最大似然估计是已经知道了 结果,然后寻求使该结果出现的可能性最大的 条件,以此作为 估计值

极大似然函数求解步骤

我们通过一个例子来进行求解分析

假定我们要从10万个人当中抽取100个人来做身高统计,那么抽到这100个人的概率就是:

L ( θ ) = L ( x 1 , … , x n ∣ θ ) = ∏ i = 1 n p ( x i ∣ θ ) , θ ∈ Θ L(\theta)=L\left(x_{1}, \ldots, x_{n} \mid \theta\right)=\prod_{i=1}^{n} p\left(x_{i} \mid \theta\right), \theta \in \Theta L (θ)=L (x 1 ​,…,x n ​∣θ)=∏i =1 n ​p (x i ​∣θ),θ∈Θ

现在,我们的目标就是求解出θ \theta θ值,使得L ( θ ) L(\theta)L (θ)的值最大。

为此我们定义 对数似然函数,将其变成连加的形式:

H ( θ ) = ln ⁡ L ( θ ) = ln ⁡ ∏ i = 1 n p ( x i ∣ θ ) = ∑ i = 1 n ln ⁡ p ( x i ∣ θ ) H(\theta)=\ln L(\theta)=\ln \prod_{i=1}^{n} p\left(x_{i} \mid \theta\right)=\sum_{i=1}^{n} \ln p\left(x_{i} \mid \theta\right)H (θ)=ln L (θ)=ln ∏i =1 n ​p (x i ​∣θ)=∑i =1 n ​ln p (x i ​∣θ)

在本科数学课程当中我们已经学过 偏导数的求解方法,为此,我们对应求L ( θ ) L(\theta)L (θ)对所有参数的偏导数,也就是梯度了,从而n n n个未知的参数,就有n n n个方程,方程组的解就是似然函数的极值点了,最终得到这n n n个参数的值。

极大似然函数估计值求解步骤如下

同样,我们也通过一个例子来讲解EM算法

两枚硬币A和B,假定随机抛掷后正面朝上概率分别为P A PA P A,P B PB P B。为了估计这两个硬币朝上的概率,咱们轮流抛硬币A和B,每一轮都连续抛5次,总共5轮:

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

硬币A被抛了15次,在第一轮、第三轮、第五轮分别出现了3次正、1次正、2次正,所以很容易估计出PA,类似的,PB也很容易计算出来(真实值),如下:

PA = (3+1+2)/ 15 = 0.4 PB= (2+3)/10 = 0.5

问题来了,如果我们 不知道抛的硬币是A还是B呢(即硬币种类是 隐变量),然后再轮流抛五轮,得到如下结果:

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

现在我们的目标没变,还是估计P A PA P A和P B PB P B,需要怎么做呢?

显然,此时我们多了一个硬币种类的隐变量,设为z,可以把它认为是一个 5维的向量( z 1 , z 2 , z 3 , z 4 , z 5 ) (z1,z2,z3,z4,z5)(z 1 ,z 2 ,z 3 ,z 4 ,z 5 ),代表每次投掷时所使用的硬币,比如z 1 z1 z 1,就代表第一轮投掷时使用的硬币是A还是B。

  • 但是,这个变量z z z不知道,就无法去估计PA和PB,所以,我们必须先估计出z z z,然后才能进一步估计PA和PB。
  • 可要估计z,我们又得知道PA和PB,这样我们才能用极大似然概率法则去估计z z z,这不是鸡生蛋和蛋生鸡的问题吗,如何解决呢?

解决方法:

  • 随机初始化一个P A 和 P B PA和PB P A 和P B,用它来估计z z z
  • 然后基于z z z,还是按照最大似然概率法则去估计新的P A PA P A和P B PB P B
  • 然后依次循环,如果新估计出来的P A 和 P B PA和PB P A 和P B和我们真实值差别很大,继续上一步过程,直到 *PA和PB收敛到真实值为止。

先随便给PA和PB赋一个值,比如: 硬币A正面朝上的概率P A = 0.2 PA = 0.2 P A =0 .2 硬币B正面朝上的概率P B = 0.7 PB = 0.7 P B =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 .2 ∗0 .2 ∗0 .2 ∗0 .8 ∗0 .8 =0 .0 0 5 1 2

如果是 硬币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 .7 ∗0 .7 ∗0 .7 ∗0 .3 ∗0 .3 =0 .0 3 0 8 7

然后依次求出其他4轮中的相应概率。做成表格如下:

轮数若是硬币A若是硬币B10.00512,3正-2反0.03087,3正-2反20.02048,2正-3反0.01323,2正-3反30.08192,1正-4反0.00567,1正-4反40.00512,3正-2反0.03087,3正-2反50.02048,2正-3反0.01323,2正-3反

我们就把概率更大,即更可能是A的,即第2轮、第3轮、第5轮出现正的次数2、1、2相加,除以A被抛的总次数15(A抛了三轮,每轮5次), 作为z z z 的估计值,B的计算方法类似。然后我们便可以按照最大似然概率法则来估计新的PA和PB。
P A = 2 + 1 + 2 15 = 0.33 P B = 3 + 3 10 = 0.6 PA = \frac{2+1+2}{15} = 0.33 \ PB =\frac{3+3}{10} = 0.6 P A =1 5 2 +1 +2 ​=0 .3 3 P B =1 0 3 +3 ​=0 .6
就这样,不断迭代,不断接近真实值,这就是 EM算法的神奇之处。

继续按照上面的思路,用估计出的P A PA P A和P B PB P B再来估计z z z,再用z z z来估计新的P A PA P A和P B PB P B,反复迭代下去,就可以最终得到P A = 0.4 PA = 0.4 P A =0 .4,P B = 0.5 PB=0.5 P B =0 .5,此时无论怎样迭代,P A PA P A和P B PB P B的值都会保持0.4和0.5不变,于是乎,我们就找到了P A PA P A和P B PB P B的最大似然估计。

计算步骤总结

用EM算法求解的模型一般有GMM或者协同过滤,k-means其实也属于EM。EM算法一定会收敛,但是 可能收敛到局部最优。由于求和的项数将随着隐变量的数目 指数上升,会给 梯度计算带来麻烦。

Original: https://blog.csdn.net/Garyboyboy/article/details/122102748
Author: 爱笑的Gary哥
Title: Machine Learning Park–EM(最大期望算法)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/550830/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球