代码说明:
文件名说明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/
转载文章受原作者版权保护。转载请注明原作者出处!