NLP --- 隐马尔可夫HMM(EM算法(期望最大化算法))

期望最大化 (Expectation Maximization) 算法最初是由 Ceppellini[2] 等人 1950 年在讨论基因频率的估计的时候提出的。后来又被 Hartley[3] 和Baum[4] 等人发展的更加广泛。目前引用的较多的是 1977 年 Dempster[5]等人的工作。它主要用于从不完整的数据中计算最大似然估计。后来经过其他学者的发展,这个算法也被用于聚类等应用。

因此如果大家理解了K-means聚类,那么这个算法就容易理解了,这里我们先一起来回归一下K-means的聚类思想,其实他的聚类思想很简单,我们来看一下算法过程:

k-means的k就是最终聚集的簇数,这个要你事先自己指定。k-means在常见的机器学习算法中算是相当简单的,基本过程如下:

  • 首先任取k个样本点作为k个簇的初始中心;
  • 对每一个样本点,计算它们与k个中心的距离,把它归入距离最小的中心所在的簇;
  • 等到所有的样本点归类完毕,重新计算k个簇的中心;
  • 重复以上过程直至样本点归入的簇不再变动。

通过上面大家可以看到,为了找到合适的聚类中心点,k-means刚开始给的初始中心是任意的,然后不断的更新迭代后按照上面算法步骤不停的更改k个中心的位置,直到他们都几乎不再变化位置,也就是说当k个位置几乎不再变化时基本上就说明了到达了真实的数据中心了。这里有一个思想就是我刚开始不知道数据的最佳K个中心点,但是我可以通过数据不停的迭代,进而达到理想的中心点,而这个思想也是EM算法的核心思想。
下面先通过一个简单的例子引入EM算法的核心思想,然后在使用数学进行证明这样做的合理性。

EM

考虑一个投掷硬币的实验:现在我们有两枚硬币 A 和 B,这两枚硬币和普通的硬币不一样,他们投掷出正面的概率和投掷出反面的概率不一定相同。我们将 A 和 B 投掷出正面的概率分别记为\theta _A\theta _B。我们现在独立地做 5 次试验:随机的从这两枚硬币中抽取 1 枚,投掷 10 次,统计出现正面的次数。那么我们就得到了如表格1的实验结果。

试验代号投掷的硬币出现正面的次数

1

2

3

4

5

B

A

A

B

A

5

9

8

4

7

在这个实验中,我们记录两组随机变量:

                                                     X = (X_1,X_2,X_3,X_4,X_5)

                                                      Z = (Z_1,Z_2,Z_3,Z_4,Z_5)

其中X_i\in \left \{ 1,2,3,4,5,6,7,8,9,10 \right \},代表试验i中出现的正面的次数,Z_i\in \left \{ A,B \right \}代表这次试验投掷的是硬币A还是B。

我们的目标是通过这个实验来估计 \theta =(\theta _A,\theta _B)的数值。这个实验中的参数估计就是有完整数据的参数估计,这个是因为我们不仅仅知道每次试验中投掷出正面的次数,我们还知道每次试验中投掷的是硬币 A 还是 B。
一个很简单也很直接的估计 θ 的方法如公式(1)所示。                                               

 实际上这样的估计就是统计上的极大似然估计 (maximum likelihood estimation) 的结果。用P(X,Z|\theta )来表示 X,Z 的联合概率分布(其中带有参数 θ),那么对于上面的实验,我们可以计算出他们出现我们观察到的结果即 x^0 = (5,9,8,4,7),z^0 = (B,A,A,B,A)的概率。函数 P(X=x^{(0)},Z = z^{0}|\theta )就叫做 θ 的似然函数。我们将它对 θ 求偏导并令偏导数为 0,就可以得到如(1) 的结果。

对其求偏导,这里只对\theta _A求偏导,\theta _B也是一样的求,这里我们把系数统一使用C来表示了,关于\theta _B的式子使用f(\theta _B)进行代替,然后整理一下上式得:

                                    P(X=x^0,Z = z^0|\theta ) = Cf(\theta _B)\theta _A^{24}(1-\theta _A)^6

对其求偏导,并令其为0的:

                                     \frac{\partial P(X=x^0,Z = z^0|\theta )}{\partial \theta _A} = Cf(\theta _B)[24\theta _A^{23}(1-\theta _A)^6-6\theta ^{24}(1-\theta _A)^5]=0 

 此时化简解得\theta _A如下:

                                      24(1-\theta _A) - 6\theta _A = 0

                                       30\theta _A = 24

                                            \theta _A = 0.8

同理可求                              \theta _B =0.45

由此可见上面利用均值和这里使用最大释然函数的结果是一样的,因此这里的(1)式称为极大释然估计。这里大家应该明白了吧。下面我们把难度加大:

我们将这个问题稍微改变一下,我们将我们所观察到的结果修改一下:我们现在只知道每次试验有几次投掷出正面,但是不知道每次试验投掷的是哪个硬币,也就是说我们只知道表1中第一列和第三列。这个时候我们就称 Z为隐藏变量 (Hidden Variable)X称为观察变量 (Observed Variable)。这个时候再来估计参数\theta _A\theta _B ,就没有那么多数据可供使用了,这个时候的估计叫做不完整数据的参数估计(这里X就可认为是HMM中的可见变量了,Z就是隐藏的状态变量了)。
如果我们这个时候有某种方法(比如,正确的猜到每次投掷硬币是 A还是 B),这样的话我们就可以将这个不完整的数据估计变为完整数据估计。
当然我们如果没有方法来获得更多的数据的话,那么下面提供了一种在这种不完整数据的情况下来估计参数 θ 的方法。我们用迭代的方式来进行:

  (1)  我们先赋给 θ 一个初始值,这个值不管是经验也好猜的也好,反正我们给它一个初始值。在实际使用中往往这个初始值是           有其他算法的结果给出的,当然随机给他分配一个符合定义域的值也可以。这里我们就给定 \theta _A= 0.7,\theta _B = 0.4
  (2)  然后我们根据这个来判断或者猜测每次投掷更像是哪枚硬币投掷的结果。比如对于试验 1,如果投掷的是 A,那么出现 5             个正面的概率为C_{10}^5\times 0.7^5\times (1-0.7^5)\approx 0.1029;如果投掷的是B,出现5个正面的概率为                                                    C_{10}^5\times 0.4^5\times (1-0.4)^5\approx 0.2007;基于试验1的试验结果,可以判断这个试验投掷的是硬币 A 的概率为                              0.1029/(0.1029+0.2007)=0.3389,是 B 的概率为 0.2007/(0.1029+0.2007)= 0.6611。因此这个结果更可能是投掷 B 出现             的结果。
   (3)  假设上一步猜测的结果为 B,A,A,B,A,那么根据这个猜测,可以像完整数据的参数估计一样 (公式2) 重新计算 θ 的值。

这样一次一次的迭代 2-3 步骤直到收敛,我们就得到了 θ 的估计。这里大家应该能感受到这和K-means很像对吧,你可能有疑问,这个方法靠谱么?事实证明,它确 实是靠谱的。下面我们就从数学角度来说明他的合理性。

数学证明

首先来明确一下我们的目标:我们的目标是在观察变量 X 和给定观察样本 x_1,x_2,...,x_n 的情况下,极大化对数似然函数

这个函数大家应该都能看懂吧,看不懂的请返回看我的上一篇博客。

其中只包含观察变量的概率密度函数(其实是求边缘密度,即对另一个变量进行求和就可以了得到边缘密度了):

                                    

 其中 Z 为隐藏随机变量,\left \{ Z_j \right \} 是 Z 的所有可能的取值。那么把(6)式代入(5)式:

                                         

这里我们引入了一组参数(不要怕多,我们后面会处理掉它的)α,它满足∀可能的j,\alpha _j ∈ (0,1]和
\sum _j\alpha _j=1到这里,先介绍一个凸函数的性质,或者叫做凸函数的定义。f(x) 为凸函数,\forall i = 1,2,3,..,n,\lambda _i\in [0,1],\sum_{i=1}^{n}\lambda _i = 1,对 f(x) 定义域中的任意 n 个x_1,x_2,...,x_n 有 :

                                                f(\sum_{i=1}^{n}\lambda _ix_i)\leq \sum_{i=1}^{n}\lambda _if(x_i)                                                     \left ( 8 \right ) 

上式称为Jensen不等式

 对于严格凸函数,上面的等号只有在 x_1= x_2=...=x_n 的时候成立。关于凸函数的其他性质不再赘述。对数函数是一个严格凸函数。因而我们可以有下面这个结果:                           

                                          

上式是\left ( 7 \right )式根据\left ( 8 \right )式得到的,只是不同的是ln是凹函数,但是同样适用Jensen不等式,只是不等号方向不一样罢了。 

现在我们根据等号成立的条件来确定\alpha _j

                                                          

这里需仔细推一下,我们知道\left ( 9 \right )的成立条件是x_1= x_2=...=x_n,那么联合概率密度P(X_i,Z_j)是不变的,等于一个常数,和j无关,和j无关的意思是当j确定时,无论i等于几上式都是一个常数,大家可以这样理解,因此可以写成\left ( 10 \right )式,对上式的j求和同时把\alpha _j乘到右边:

                                                      \sum_{j}P(X_i=x_i,Z=z_j) = \sum _j\alpha _j*c = c 

我们仔细看看等式的左边,他是对j求和,而且P是联合概率密度,对某一个维度求和不就是求边缘密度吗?所以上式可以写为如下:

                                            \sum_{j}P(X_i=x_i,Z=z_j) = P(X_i=x_i)=\sum _j\alpha _j*c = c

也就是说:

                                           P(X_i=x_i) = c

此时把上式代入(10)式,可得(11)式

其中 c 是一个与 j 无关的常数。因为\sum _j\alpha _j=1稍作变换就可以得到 

                                                          

上式是什么意思呢?大家还记得条件概率的定义吗?

                                                            P(B|A) = \frac{P(AB)}{P(A)}

 因此(11)式就是条件概率的表达式即为P(Z=z_j|X=x_i) = \frac{P(X_i=x_i,Z=z_j)}{P(X=x_i)}.,这个式子代表什么意思呢?其实就是在我们知道了扔的硬币为正的情况下这个硬币为A或者为B的概率,就是再求隐藏的条件概率。

现在来解释一下我们得到了什么。\alpha _j就是 Z=z_j 在 X=x_i下的条件概率或者后验概率。求 α 就是求隐藏随机变量 Z 的条件分布。总结一下目前得到的公式就是 

                                             

好,得到上式以后,我们如何求\theta呢,这里需要和大家说明的是,这里的\theta在上式没体现处理,他是包含在P和\alpha中的,这里大家需要理解,那我们如何求解参数\theta使的l(\theta )达到最大呢?这里我们需要明确上式是很复杂的,直接求导不好求,因此需要想办法进行间接求极大值,怎么求呢?这里给出一个简单的例子:

                                                l(\theta )=d(\theta )q\left ( \theta \right )

假设有一个待求极值的函数l(\theta ),如上式,其中d(\theta )很复杂无法求导,而q(\theta )相对简单一点,那么针对这样的函数我们如何求极值呢?这里提供一种迭代的方法,首先我给d(\theta )任意赋值一个\theta _0的值,此时d(\theta _0)就是一个常数了,那么上式就可以写成l(\theta )=d(\theta_0 )q\left ( \theta \right ),此时在对l(\theta )求导得到\theta _1,再把\theta _1代入d(\theta ),在类似的计算,直到\theta不再发生变化此时的\theta就是所求的值,过程如下:

                                                  \theta _0                              l(\theta )=d(\theta_0 )q\left ( \theta \right )        \rightarrow \theta _1

                                                  \theta _1                              l(\theta )=d(\theta_1 )q\left ( \theta \right )        \rightarrow \theta _2

                                                  \theta _2                              l(\theta )=d(\theta_1 )q\left ( \theta \right )        \rightarrow \theta _3

                                                                                         ..........

                                                                 迭代到\theta基本上不再变化或者达到我们设定的阈值

解我们的(12)也是这样的思想。

直接就极大值比较难求,EM 算法就是按照下面这个过程来的。 

(1)  根据上一步的 θ 来计算 α,即隐藏变量的条件分布

(2)  极大化似然函数来得到当前的 θ 的估计

EM算法流程

期望最大化算法就是在这个想法上改进的。它在估计每次投掷的硬币的时候,并不要确定住这次就是硬币 A 或者 B,它计算出来这次投掷的硬币是 A 的概率和是 B 的概率;然后在用这个概率(或者叫做 Z 的分布)来计算似然函数。期望最大化算法步骤总结如下:

总结一下,期望最大化算法就是先根据参数初值估计隐藏变量的分布,然后根据隐藏变量的分布来计算观察变量的似然函数,估计参数的值。前者通常称为 E 步骤,后者称为 M 步骤。

好本节就到这里,下一节来看看HMM的第三个问题的在语料不完整的情况下的解决方法。

参考文献:《期望最大化算法》   binary_seach   December 3, 2012

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34433.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法

最近我们被客户要求撰写关于MCMC的研究报告,包括一些图形和统计输出。 我们将研究两种对分布进行抽样的方法:拒绝抽样和使用 Metropolis Hastings 算法的马尔可夫链蒙特卡洛方法 (MCMC)。像往常一样,我将提供直观的解释、理论和一些带有代码…

机器学习笔记马尔可夫链蒙特卡洛方法(二)马尔可夫链与平稳分布

机器学习笔记之马尔可夫链蒙特卡洛方法——马尔可夫链与平稳分布 引言回顾:蒙特卡洛方法马尔可夫链与平稳分布马尔可夫链平稳分布细致平衡 关于平稳分布的补充马尔可夫链的本质平稳分布的收敛性证明 相关总结 引言 上一节介绍了蒙特卡洛方法的具体思想 以及一些具体…

大气模型软件:WRF、CMAQ、SMOKE、MCM、CAMx、Calpuff、人工智能气象、WRFchem、PMF、FLEXPART拉格朗日粒子扩散、WRF-UCM、EKMA

推荐给大家一些大气科学相关的模型软件,今天主要整理了一些需求量较高的,大家可以详细了解。零基础的可以点击此链接 >>零基础学习大气污染模式(WRF、WRF-chem、smoke、camx等) 目录 一、(WRF-UCM)…

毕业论文-马尔可夫随机场

0 序言 这篇博客也与我的毕业论文有关,在上个阶段中,我用python代码实现了EM算法,并及进行了细节上的改进,并记录成了博客: 毕业论文-EM算法学习总结https://blog.csdn.net/qq_41938259/article/details/128396229?s…

马尔科夫系列——三、隐马尔可夫模型 - 学习问题 - Baum-Welch算法

转载的过程中发现,原文有些地方不太理解,就阅读了其他的文章,然后把代码的实现也引进来了。之前并没有验证代码的准确性,后面有人说,代码可能有问题,我尝试了修改。把简单修改版本的也放上来。 目录 一、…

马尔可夫链蒙特卡洛(MCMC)在python中的实战案例应用

最近由于工作繁忙,博客更新较慢,所以请大家见谅!pymc是一个做贝叶斯分析的python库,我之前的博客中已经介绍了pymc的使用方法,今天再给大家做个更详细的应用案例介绍。该案例来自于github,我将其代码稍微修…

马尔可夫蒙特卡洛(MCMC)附python代码

马尔可夫蒙特卡洛(MCMC) 1.马尔可夫链(Markov Chain) 随机过程是一组随机变量 X t X_t Xt​的集合, t t t为整数的时候,就是离散随机过程。马尔可夫过程是指一个满足马尔可夫性质的随机过程。马尔可夫性质是指: P ( X t 1 ∣ X…

隐马尔可夫模型在map-matching中的应用

该要 Map-matching是指将手机gps上报的轨迹点(经纬度)映射到路网上。由于精度问题,上报的轨迹点通常和实际位置有所偏差,因此产生了很多算法进行绑路,其中效果最好的是hmm(隐马尔可夫模型)的应…

隐马尔可夫模型HMM+维特比算法(Viterbi Algorithm)进行词性标注代码实现(自然语言处理课程第二次作业)

文章目录 一、理论描述二、算法描述三、详例描述具体过程分析题目数据预处理转移概率矩阵:发射概率矩阵: HMM维特比算法进行词性标注开始进行词性标注:The:bear:is:on:the:move&…

海尔计算机无法装win7系统,海尔Haier电脑预装win8换win7系统BIOS设置及安装教程

现在市场很多笔记本或一体机电脑都是预装win8或win8.1操作系统,但很多用户还是比较习惯使用Win7或xp操作系统,所以会在预装的win8系统上安装自己所习惯的操作系统,一般情况要更换预装的系统是要对BIOS进行设置的,在不同品牌的电脑…

海尔微型计算机硬盘如何拆卸,海尔a62的详细拆机步骤【图文教程】

随着社会的不断发展,台式电脑已经无法满足市场的需求了,现在 笔记本电脑 非常地流行,它以轻薄的机身和过高的配置赢得了很多顾客的喜爱,所以市场上也出现了各种品牌的笔记本电脑。大家知道吧,任何东西都是优势互补的&a…

海尔计算机无法装win7系统,海尔品牌机win10改win7系统教程

近期有朋友向小编反映说,最近想将海尔品牌机预装的win10系统改成win7的,但是每次ghost完系统后,总是启动不开,这是怎么回事呢?这一般是bios的设置不对,这里小编就来给大家介绍一下海尔品牌机怎么将win10改成…

海尔android 电视直播软件,海尔智能电视如何安装直播软件看直播

嗨,大家好,今天我来给大家简单介绍一下智能电视怎么安装第三方软件?买了智能电视,很多用户 都会发现它不能像传统电视一样去看直播电视。这个时候我们就需要去安装第三方软件去解决。 一般来说,在智能电视里面&#xf…

海尔微型计算机U盘启动,海尔台式电脑如何bios设置u盘启动教程

许多用户打算使用u盘给海尔台式电脑装系统,但在操作过程中发现不会设置u盘启动,其实只要了解清楚,掌握海尔台式电脑bios设置u盘为第一启动项的方法很是简单,今天快启动小编就为大家分享下详细操作教程把。 海尔台式电脑从u盘启动有…

海尔云悦2db微型计算机,家庭主机新选择 海尔云悦mini2首发评测

1海尔云悦mini2评测前言 虽然家用台式机的市场份额一直持续下滑,以至于业界很多人认为台式机已经退出历史舞台,被笔记本、一体电脑所代替。但是,笔者要在这里为台式机正音,台式机依然是很多用户的选择,并且台式机体积越来越小,功能越来越多。甚至,台式机开始进军客厅战场…

海尔电视android怎么设置,海尔电视怎么连接手机 海尔电视连接手机步骤

随着电视发展越来越迅速,电视的更新换代也是非常越来越快。而如今电视也变得越来越智能化了。它不但可以看电视,还可以连接网络,连接手机的。而电视行业品牌也是非常的多的。而对于电视老品牌 海尔 ,它们的产品也是非常优秀的。并…

海尔电视 android,海尔电视遥控器

海尔电视遥控器手机版是一款多功能智能电视控制软件。海尔电视遥控器app支持多种手机品牌,通过与手机连接之后,手机就变成了遥控器,使用更方便! 软件介绍 海尔电视遥控器app全面支持多品牌手机,没有网络也能轻松遥控电…

海尔电视 android,海尔电视怎么投屏

导言:你知道海尔电视怎么投屏吗? 摘要:海尔是当前国内非常受欢迎的品牌,在当下飞速发展的时代,海尔电视也与时俱进。现在的海尔电视不仅仅只限于观看,还可以连接手机,更可以电视投屏。那你知道海…

海尔微型台式计算机重装系统,海尔台式电脑bios设置u盘启动教程

海尔是全国知名品牌,相信用户朋友们多少都有点了解海尔这个老品牌,可是最近有用户想用u盘给海尔电脑重装系统,但是不知道海尔电脑bios设置u盘启动方法,其实海尔台式电脑bios设置启动项很简单,装机吧小编写了一份海尔台式机bios设置u盘启动的方…

海尔台式计算机配置,海尔台式机bios设置图解方法

海尔是全国知名品牌,相信用户朋友们多少都有点了解海尔这个老品牌,可是最近有用户想用u盘给海尔电脑重装系统,但是不知道海尔电脑bios设置u盘启动方法,其实海尔台式电脑bios设置启动项很简单,接下来是小编为大家收集的海尔台式机bios设置图解…