您的位置:首页 > 其它

机器学习算法实践-算法原理-EM算法(一)-初识EM以及相关概念

2016-10-13 19:44 357 查看
转载请标明出处http://blog.csdn.net/zhaohang_1/article/details/52809504,谢谢合作!
网上也是看了好几个大牛写过的文章,后来发现每个人的出发点不一样,大多是从数学角度上先来阐述原理的,然后完全复写了“E”和“M”过程,对于我这种刚上研究生数学底子有点差的人来说实在有点太过晦涩,我也是在读了各家关于EM的表述后想尽量做到对小白讲明白“EM”算法。不过需要再说一点,程序员出身,所以接下来的东西我会“重思想,轻数学”,如果在数学问题上有什么错误,也希望大家可以提出来帮我纠正一下,先在此谢过了~

-------------------------------这是一条华丽的分割线,下面开始进入正题----------------------------------

在正题开始之前,我把总结的几个精髓思想先说一下
1.EM算法,与其说是“算法”,更应该说是“思想”,EM可以解决一类问题(后面会解释这一类问题指的是“包含隐藏变量”的问题),这也就是为什么他可以列为数据挖掘十大经典算法之一的原因之一了吧;
2.EM几乎和GMM(高斯混合模型)形影相随不离不弃,因为这个EM思想特别适合于解决混合高斯问题;
3.EM方法呈现的特征即两个词“迭代”和“收敛”;
4.所有其他你所看到的用Jensen不等式来推导EM的根本思想在于“证明EM在数学上逻辑上是正确的”,这也就是作为程序员如果数学底子不好,那么在这里可以忽略EM的Jensen推导;
以下这个图是我的在学习EM过程的总结,因为本人不喜欢看那么多文字描述,所以就先一上来先入为主给他加阐述一下这个EM知识结构的框架图:



相关概念:
1.GMM(Gaussian Mixture Models)高斯混合模型:简单来讲,混合高斯是这样的存在,看一下下面的图(图来自网络,出处不明,特此声明)应该会很清晰了,这个我就不多讲了,就是几个高斯(正态)分布的混合;
                             

                        


不过还是要说一下:
      第一个图是三个高斯分布的混合,描述三个高斯分布的混合需要三个参数θ1=(μ1,σ1),θ2=(μ2,σ2),θ3=(μ3,σ3)就可以了;
      第二个图是三个高斯分布的混合,描述三个高斯分布的混合也需要三个参数θ1=(μ11,μ12,σ11,ρ12),θ2=(μ21,μ22,σ21,σ22,ρ2),θ3=(μ31,μ32,σ31,σ32,ρ3)就可以了。
      至于再往上维度的高斯分布以及高斯分布混合,就先不再说了。
2.似然函数:首先先明白似然函数的意义:
      现在已经拿到了很多个样本(你的数据集中所有因变量),这些样本值已经实现,最大似然估计就是去找到那个(组)参数估计值,使得前面已经实现的样本值发生概率最大。因为你手头上的样本已经实现了,其发生概率最大才符合逻辑。这时是求样本所有观测的联合概率最大化,是个连乘积,只要取对数,就变成了线性加总。此时通过对参数求导数,并令一阶导数为零,就可以通过解方程(组),得到最大似然估计值。

      可能直接看定义比较复杂,我们直接表述其用途:根据实际得到的结果做参数估计,并假定这个参数估计就是实际的参数。
3.隐藏变量
      “包含隐藏变量”,不少材料上都是这么说的,没错,一个动词“包含”,一个名词“隐藏变量”。
      先解释包含,是说数据来了,但是有些参数并没有给出;
      再解释隐藏变量,很明显,就是没有给出的参数;
      这么说有点含糊,举个例子,你统计了你们班所有人的身高但是并没有统计这些身高对应的人的性别,那么性别作为两类区分,可以衡量男女身高的参数(比如“男生平均身高”和“女生平均身高”)就可以作为隐藏变量了,另外,男女生的比例我们也不清楚,所以实际上“比例”这个参数也可以作为隐藏变量。从后面的解释我们将会清楚,EM的精髓,就在于能够以迭代的方式收敛得到这个隐含的变量值。
4.Jensen不等式

不少EM算法中都提到了Jensen不等式,实际上如果对于不打算考虑数学的人来说倒是可以不怎么需要,Jensen在EM中的作用更多的是证明了EM的正确性,期间有个式子通过分子分母同时乘以一个因式而巧妙地使用了Jensen不等式,但这是后话了,关于Jensen不等式,只要知道两点:f是凸函数时, E[f(X)] ≥f(EX);应用于凹函数时,E[f(X)] ≤f(EX)。关于它的证明略,其图像,如下所示,本处不提供证明。


-------------------------------这是第二条华丽的分割线,区分上边EM所必备的基础知识和下面的EM正式描述----------------------------------

一、从问题入手
接下来,我们从问题入手,先看一下我们要解决的问题类型:


我们再拿出这个图来看,实际上我们先得到的统计数据是那条紫色的线,但是我们需要得到这个紫色的线究竟是哪三个高斯分布的混合;
→→→更数学一点来说,就是:根据这个紫色的线条,我们如何得到这三个高斯分布的每个分布的参数;
→→→再数学一点,就是根据统计的紫色线条,得到三个高斯分布的参数值θ1=(μ1,σ1),θ2=(μ2,σ2),θ3=(μ3,σ3)。
二、看一下EM对于这个问题的思路
1.首先,随机这三个值μ1,μ2,μ3,即这三类的平均值,然后,根据这三个值会搜集三类数据,这个收集数据的过程通过概率来完成,遍历每个数据,看更属于那个μ值;
2.然后,收集的数据通过最大似然函数会得到新的三个参数μ值;
3.根据第二步得到的μ值会重新回归到第一步并重新收集三类数据,此时通过第二步的操作会重新得到新的参数μ值;
→ → →然后重复2、3步的操作就是开始迭代EM过程,之所以叫做EM,是因为过程中“需要最大化期望”(这里暂时不明朗,继续往后看),而关于为甚这个过程是正确的,则是“Jensen不等式”提供了完整的证明,实际过程是在运算过程中巧妙地在有个地方分子分母同时乘以了一个数后,利用了Jensen不等式把这个EM过程的正确性进行了证明。
三、EM的推导
下面开始进行EM的数学推导过程
首先对于收集的数据如下,初始情况下设定一个μ1和μ2代表男女平均身高,此时把所有的身高数据进行归类,通过概率模式将其划分到z1或者z2类里面,得到的结果基本是下面这种,其中用“1”和“0”来表示归类,用“1-0”模式记录数据最大的好处是编程的时候直接加和就可以完成统计,主要是方便:


得到这样的数据,实际我们还可以得到以下的几个显而易见的结论:1.p(x) = α1·f(x|μ1,σ1)+α2·f(x|μ2,σ2);2.关于统计的信息,其数据形式

接下来,根据以上的数据,我们开始执行以下操作

则可以得到EM的步骤如下所示:


四、EM和GMM的结合通过以上的推导,实际上添加一个“协方差矩阵”这个参数就变成了处理GMM的EM算法,期间我把Jensen的使用也添加进去以便于理解Jensen的作用。




这样,EM和GMM的结合就完成了,由于个人目前理解有限,代码正在酝酿,其中存在错误也在所难免,甚至上面公式的使用为了方便也用了几种不同的写法,关于其他还望各位提出意见和建议。最后,贴一张大家经常会看见的EM的结果迭代图再助于大家理解一下EM过程:


五、关于EM的总结和缺陷总结:核心流程


缺陷:由于EM和Kmeans一样存在初始点的选择问题,而且EM的计算量由于计算概率,其耗时远超Kmeans的计算欧氏距离的耗时,所以,往往先用Kmeans迭代出初始点,再用这个初始点作为EM算法的初始点开始进行迭代计算。
(注:某些参考资源暂未补充,后续我会添加;另外,也欢迎提出错误,不过本人数学基础略微薄弱,诚心请指点但请勿喷,谢谢咯,

,再另外,转载请标明出处:http://blog.csdn.net/zhaohang_1/article/details/52809504 )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: