EM算法小记

前段时间实现了估计参数的有限混合正态分布EM算法,虽然是别人的东西拿来借鉴,不过还是要自己笔记一下,以后才能说得出口

直接说实际解决问题,现有n个数据,每个属性都有m个属性值,比如一个人可能有身高、工资、年龄等属性。现在我们将这群人分成不同的几类,然后确定想确定哪些人对自己所属的类贡献值最大,也就是要寻找每个类最鲜明代表的人,比如说富二代的特点可能是身高:175,年龄:18,月均花销:5W等。为了达到这个目的,构建下面一个函数:

 f(x) = a1f1(x1)+a2f2(x2)+……+akfk(xk) ……(1),

其中x是一随机变量,x=(x1,x2,……,xk),xi即为属性值的随机变量。

现在再假设每个属性列上的分布都是正态(高斯)分布,其实现实情况很多概率分布都近似正态分布,两头小,中间多。比如说一个人长得帅的少,长的普通的多。即使有些属性列分布不符合正态分布,我们也只需要做一些简单的变换比如取一个log值就可以让这个分布近似于正态分布。那么其实现在f(x)已经不仅仅是我们表面上看到的f(x),他和正态分布的参数息息相关,即有个隐参数向量Φk=(a1,a2……ak;u1,u2……uk2122……δ2k),u,δ2为均值和方差,使得(1)的参数形式如下所示:

……(2)


一般做估计很容易想到最大似然估计,即要使以下式子达到最大,

 ……(3)

一般求最大似然估计时只需要对上式求微分然后就可以妥妥的得到得到想要的a,u,δ2,可是实际上还不能这么做,因为a,u,δ2都是事先未知的,我们只能估计或者假设最初a,u,δ2,因此这里采用EM算法来解决以上问题。

EM算法即最大期望值算法,分2步。第一步,即E步,求出期望值,第二步,M步要最大化这个期望值。通过这样一次迭代可以产生一个新的估计参数,如果对估计参数反复迭代这个过程,可以最终得到一个较好的估计参数。为什么呢?数学太差,不会证明……反正有人证明EM算法是局部收敛或者是全局收敛的?

现在采用EM来解决问题。

1、首先假设初值,设定aj=1/m,m为属性个数,即认为每个属性列一开始都是一样重要的,u,δ2通过一般的统计方法得出。

2、E步,现在就是要求aj的期望。而对于每个数据,也就是每个人来说,每个属性列影响的程度不一定完全一样,比如说两个白富美a,b,a可能白、富、美的影响因子分别为0.2,0.5,0.3和0.4,0.2,0.4,因此我们需要对每个数据分别求得aij,最后再对这个aij取一个期望值即均值得到我们要求的aj。那么aij怎么确定呢?就用这一数据的这一列属性的加权值除以整个数据的属性的加权值,即这列属性值在整个属性值占的比重和权值。有如下式:

……(4),式子右上标0代表上一次迭代的值或者说旧值,本次迭代出的新值标1

则aj=aij/n。

3、M步,最大化过程,这个过程不是最大化期望值,过去一直这么理解理解不了,其实最大化还是要最大化(3)式,

对于u,δ2最大化(3),即用(3)式分别对二者取微分,得到以下式子。

……(6)

令(6)中两式为0,得到u,δ2

……(7)

于是,每一轮初始估计参数生成新的估计参数如下:

 ……(8)

最后是终止条件,一般是(3)式中的目标函数小于某个阈值即中止,也可以是其他评判标准。

EM估计整个参数过程即为(8)中所示,不过在编程中如果是按部就班来的话将会造成计算量很大,速度较慢。

编程时需注意优化,E步可以进行动态计算,并存储M步所需的一些中间过程,那么M步只需迭代一次所有元素即可得到最后的结果值。

比如迭代计算aij时,可以同时迭代aijxij、aij(xij-uj),那么在M步时可以一次迭代同时计算出a,u,δ2

总结完毕^_^

原文地址:https://www.cnblogs.com/lake19901126/p/3096454.html