资源描述:
《Opencv2.4.9源码分析——Expectation Maximization》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Opencv2.4.9源码分析——ExpectationMaximization一、原理期望极大算法(EM,ExpectationMaximization)是一种能够得到极大似然参数估计的迭代方法。虽然EM算法在不同的领域被更早的提出,但它是由Dempster等人于1977年被正式命名并给出解释。对于一个除了拥有未知参数和可观测变量外,还包含隐含变量的统计模型来说,是无法用极大似然方法直接得到参数的,这是因为我们不能像极大似然法那样,同时对未知参数和隐含变量求导来求解似然函数。但该模型可以应用EM算法得到,它是通过可观测变量分别求解两个方程
2、,即把第一个方程的解代入第二个方程中,再把第二个方程的解代入第一个方程中,依次类推直到收敛为止。虽然EM算法不能保证得到全局极值点,但可以通过一些方法得到改善,如选取不同的初始值,比较最终的结果。下面我们就来详细推导EM算法。给定一组相互独立且同分布的训练样本X={x1,x2,…,xn},每个样本都是一个d维的向量,即每个样本都具有d个特征属性,xi∈Rd,设p(X
3、θ)为被参数θ控制的概率密度函数,如X服从高斯正态分布,则θ表示均值μ和标准差σ,即X~N(μ,σ2):式中,p(xi
4、θ)=∑jp(xi,yj
5、θ)表示观测到的变量xi的概率
6、分布为所有类标签yi(i=1,…,K)下xi的概率之和。式5中包含了“和的对数(ln∑)”的形式,因此我们还是应用导数为0的方法求最大值就不那么容易了。很明显,如果Y已知,则通过完整数据Z的似然函数——L(θ;X,Y)=lnp(X,Y
7、θ)可以很容易的得到参数θ。L(θ;X,Y)其实是一个X和θ是常数,Y是随机变量的函数。基于引入的隐含变量,EM算法给出了一种非常有效的处理极大似然参数估计的迭代方法。每次迭代都包括两个步骤:期望步骤(E-Step)和极大步骤(M-Step)。在E-Step中,需要计算在给定X和当前参数估计下,关于Y的完整数
8、据的对数似然函数lnp(X,Y
9、θ)的期望值,其定义为:式69的结果再代入式66~式68,这样就实现了一次次迭代的过程。在第一次迭代之前,我们需要初始化参数。这里有两种初始化参数的方法:第一种是只初始化p(k
10、xi,θ(0)),然后由式66~式68分别得到αk(1),μk(1)和∑k(1),也就是该种方法是从M-Step开始执行;第二种是初始化αk(0),μk(0)和∑k(0),然后由式69得到p(k
11、xi,θ(0)),也就是该种方法是从E-Step开始执行。这两种参数初始化的方法效果是相同的。当然在第二种方法中,αk(0),μk(0),和
12、∑k(0)也可以由k-means算法估计得到。有两种方法用来结束EM算法的迭代:一种是按照迭代的次数;另一种是判断迭代是否足够收敛,而收敛是通过两次迭代中对数似然函数是否足够接近来判断的,即两个对数似然函数之差小于某一极小值时,我们认为迭代收敛了,则EM算法结束。下式为高斯混合模型的对数似然函数:二、源码分析OpenCV所实现的EM算法是对高斯混合模型的参数估计。与前面介绍过的其他的机器学习算法不同,EM算法是非监督的学习算法,它不需要样本的响应值(即类别标签或函数值)作为输入。相反,它计算的是高斯混合模型参数的极大似然估计。EM类实现了E
13、M算法,该类的构造函数为:[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片EM::EM(intnclusters=EM::DEFAULT_NCLUSTERS,intcovMatType=EM::COV_MAT_DIAGONAL,constTermCriteria&termCrit=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS,EM::DEFAULT_MAX_ITERS,FLT_EPSILON))nclusters表示高斯混合模型的高斯成分数量,即式27中的K,
14、该参数的缺省值为EM::DEFAULT_NCLUSTERS=5,有些EM算法可以通过优化得到该值,但OpenCV没有实现该功能,所以只能事前确定该值。covMatType表示对协方差矩阵的一种限制,也就是协方差矩阵的形式,可以选取下列三个值:EM::COV_MAT_SPHERICAL、EM::COV_MAT_DIAGONAL和EM::COV_MAT_GENERIC,其中EM::COV_MAT_DIAGONAL为缺省值。EM::COV_MAT_SPHERICAL表示协方差矩阵是一个标量乘以单位矩阵,即sk×I,所以对协方差矩阵的估计只需要确定
15、sk即可;EM::COV_MAT_DIAGONAL表示协方差矩阵是一个对角线元素为正数的对角矩阵,这时只需要对d个参数进行估计即可,d为样本特征属性的数量;EM::COV_MAT