前言:想学习一些统计学的知识,所以想把自己学习的过程记录下来,希望自己能够坚持下来。也非常希望能够在CSDN找到小伙伴一起学习,监督,共同成长。


EM算法和高斯混合模型学习

一、EM算法的引入

EM(expectation maximization)算法在李航的书《统计学习方法》中的定义如下:EM是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计,或者极大后验概率的估计。(对于这个概率模型的极大似然估计以及极大后验概率这两个概念,表示忘记了,所以需要重新拾起一遍)
EM算法的每次迭代包括两步:

  • E步:求期望。利用当前估计的参数值来计算对数似然的期望值。
  • M步:求极大(后验概率或者极大似然估计)寻找能使E步产生的似然期望最大的参数值,然后不断迭代。

二、相关概念的解释

1、概率模型

因为EM算法是用来求解概率模型的参数问题的,那么对于概率模型是什么必然要有了解。对于概率模型,在维基百科上的解释如下:
概率模型(Statistical Model,也称为Probabilistic Model)是用来描述不同随机变量之间关系的数学模型,通常情况下刻画了一个或多个随机变量之间的相互非确定性的概率关系。从数学上讲,该模型通常被表达为 { (Y,P)} (Y,P),其中 {Y} Y是观测集合用来描述可能的观测结果, {P} P是 { Y} Y对应的概率分布函数集合。若使用概率模型,一般而言需假设存在一个确定的分布 { P} P生成观测数据 { Y} Y。因此通常使用统计推断的办法确定集合 { P} P中谁是数据产生的原因。
对于这个解释我个人的理解就是需要求解出P,但是P是一个函数,所以会涉及到很多参数的求解,所以这个过程中就会出现问题:采用什么样的方法来求解这个问题,或者说这些函数都符合哪一类函数?线性?高斯?求解这个的过程也是需要参考已有的数据集的。这些数据集又会出现各种情况:完不完整?可不可靠?其实对于整个概率模型的解释,可能百度百科上的解释更为通俗一些,大家可以参考一下。

2、极大似然估计

对于极大似然估计,我需要理一理。首先是一些基本的概念问题。

  • 概率密度函数:是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数,而随机变量的取值落在某个区域之内的概率则为概率密度函数在这个区域上的积分。(也就是说一个随机变量在某个点附近可能满足的函数,就是概率密度函数)
  • 最大似然估计的原理:对于一个概率分布函数,我们并不知道他的分布参数,但是我们可以通过采样求出他对应的参数。每一个采样对应不同的值,最大似然估计会寻找关于参数 {theta }的最可能的值(即,在所有可能的 {theta } 取值中,寻找一个值使这个采样的“可能性”最大化)。我们首先要定义似然函数:

    并且在 {theta } 的所有取值上通过令一阶导数等于零,使这个函数取到最大值。这个使可能性最大的 theta值即称为 {theta } 的最大似然估计。

三、问题的引入

之前也说过,EM算法是用来求解概率模型当中的隐变量问题的。那么什么是隐变量问题呢?
在以前的机器学习算法中,我们一直假设样本所有属性变量的值都已被观测到,也就是说训练样本是“完整的”,但是在显示生活中往往会遇到“不完整”的。比如周志华书中的一个例子:例如由于西瓜的根蒂已脱落,无法看出是“蜷缩”还是“硬挺”,则训练样本的“根蒂”属性变量值未知。在这种存在“未观测”变量的情形下,是否仍能对模型参数进行评估呢?自然是可以的,未观测变量我们称之为“隐变量”(latent variable)。

在李航的《统计学习方法》中有这样的解释:


三硬币的例子
有ABC三枚硬币,单次投掷出现正面的概率分别为π、p、q。利用这三枚硬币进行如下实验:

  1. 第一次先投掷A,若出现正面则投掷B,否则投掷C
  2. 记录第二次投掷的硬币出现的结果,正面记作1,反面记作0

独立重复1和2十次,产生如下观测结果:

1 1 0 1 0 0 1 0 1 1

假设只能观测到掷硬币的最终结果,无法观测第一次投掷的是哪一枚硬币,求π、p、q,即三硬币模型的参数。

记模型参数为θ=(π,p,q),无法观测的第一次投掷的硬币为随机变量z,可以观测的第二次投掷的硬币为随机变量y,则观测数据的似然函数为:

EM模型 em模型是什么_迭代

这是个一目了然的式子,两个事件,第一个事件选出那枚看不到的硬币,第二个事件利用这枚硬币进行一次投掷。利用硬币结果只可能是0或1这个特性,可以将这个式子展开为:

EM模型 em模型是什么_迭代_02

y的观测序列给定了,怎么找出一个模型参数,使得这个序列的概率(似然函数的值)最大呢,也就是求模型参数的极大似然估计:

EM模型 em模型是什么_概率模型_03

这个问题我认为是个NP(无法解决的)问题,一方面,给定模型参数,可以在多项式时间求出似然函数的值,然而模型参数的组合是无穷的,谁也不知道它是否是最优的。


EM对于这个问题的简单解释

EM算法是求解这个问题的一种迭代算法(我认为并非精确算法,而是近似算法),它有3步:

- 初始化:选取模型参数的初值:

EM模型 em模型是什么_概率分布_04

,循环如下两步迭代

- E步:计算在当前迭代的模型参数下,观测数据y来自硬币B的概率:

EM模型 em模型是什么_概率模型_05


这个式子也是一目了然的,分子代表选定B并进行一次投掷试验,分母代表选定B或C并进行一次投掷试验,两个一除就得到试验结果来自B的概率。

- M步:估算下一个迭代的新的模型估算值:

EM模型 em模型是什么_概率分布_06

这个也好说,把这n个{试验结果来自B的概率}求和得到期望,平均后,得到B出正面的似然估计,同理有p和q。
重复迭代,直到收敛为止。

这个模型中,观测数据Y和隐数据Z组合在一起称为完全数据,单独的观测数据Y称为不完全数据。在隐数据未知的情况,无法直接估计Y的概率分布。但当模型概率给定时,就可以估计Y的条件概率分布了。

Y的条件概率分布估计出来后有什么用呢?利用Y的条件概率分布,又可以更新模型参数……那问题来了,为什么要这么做,这么做能否找到最优解,原理是什么?

带着这些问题啃书本稍微有趣一些,在探索这个问题之前,有必要规范地描述EM算法,并引入一些正规的符号和定义:

EM算法的标准定义

输入:观测变量数据Y,隐变量数据Z,联合分布

EM模型 em模型是什么_EM模型_07

,条件分布

EM模型 em模型是什么_EM模型_08


输出:模型参数θ。

  • (1) 选择参数的初值,开始迭代;
  • (2) E步:记为第i次迭代参数θ的估计值,在第i+1次迭代的E步,计算
    这里,是在给定观测数据Y和当前的参数估计下隐变量数据z的条件概率分布;
  • (3) M步:求使的θ,确定第i+1次迭代的参数的估计值
  • (4)重复第(2)步和第(3)步,直到收敛。
    式的函数是EM算法的核心,称为Q函数(Q function)。

定义(Q函数)完全数据的对数似然函数

EM模型 em模型是什么_统计学_09

关于在给定观测数据Y和当前参数

EM模型 em模型是什么_概率分布_10

下对未观测数据Z的条件概率分布

EM模型 em模型是什么_统计学_11

的期望称为Q函数,即

EM模型 em模型是什么_迭代_12

下面关于EM算法作几点说明:

- 步骤(1)参数的初值可以任意选择,但需注意EM算法对初值是敏感的。

- 步骤(2)E步求Q函数。Q函数式中Z是未观测数据,Y是观测数据。注意,Q函数

EM模型 em模型是什么_概率模型_13

的第1个变元表示要极大化的参数,第2个变元表示参数的当前估计值。每次迭代实际在求Q函数及其极大。

- 步骤(3)M步求Q函数的极大化,得到

EM模型 em模型是什么_EM模型_14


完成一次迭代

EM模型 em模型是什么_概率分布_15

,后面将证明每次迭代使似然函数增大或达到局部极值。

- 步骤(4)给出停止迭代的条件,一般是对较小的正数

EM模型 em模型是什么_统计学_16

,若满足

EM模型 em模型是什么_统计学_17


则停止迭代。

以上都是李航的《统计学习方法》中的内容,之后就是EM算法的导出了。这里也就省略了,主要是符号太难截图了。可以参考书籍或者这篇博客

EM算法的一些数学推导

EM算法的数学推导中会用到一个Jensen不等式,那么这个不等式的定义如下:

过一个凸函数上任意两点所作割线一定在这两点间的函数图象的上方,即:见维基百科

EM模型 em模型是什么_概率分布_18

书中采用的是:

EM模型 em模型是什么_EM模型_19

同时我一直对于为什么对于含有隐变量的概率模型不能采用简单的贝叶斯或者极大似然估计的方法求出参数这个问题感到疑惑,查了查,知乎上慧航的有这么一段解释我觉得能大概帮助我理解一些:

EM模型 em模型是什么_统计学_20

也就是在已有观测结果的基础上,加上假设的参数,求出隐变量的概率分布,然后基于这个概率分布得出参数的期望(E),然后最大化这个期望(M)(不断找到一个参数使得期望最大)。我觉得解释的比较好的还有一个博客

EM算法的一些理解

EM算法可以说是求极大似然估计的一种方法,虽然李航博士的书中说对于隐变量(三硬币)的问题没有解析解,但是其实还是可以用似然估计进行求解的(具体求解方式还未查),但是直接方法求的话比较难,复杂度也高,因此采用EM算法。EM算法就是求解这样的问题:未知两个参数A,B,这两个参数之间还有一定的联系,那么就可以先假设其中一个参数A的初始值,然后计算另一个参数B的值,再通过另一个参数B来调优A的值。另外一篇写得很不错的,通俗易懂的,由@zouxy09写的博客博客