HMM及维特比算法

参考

HMM:https://blog.csdn.net/sinat_25346307/article/details/79119366

Viterbi算法:https://blog.csdn.net/shenxiaoming77/article/details/79228378

 

一、HMM定义  以词性标注为例说明

图1 词性标注任务

1、问题:如图1所示,已知x,求x的词性标注y。

    该问题转化为数学语言即为:在已知x的条件下计算得y的最大概率,如公式(1)所示

(1)

     由条件概率公式可得公式(2)

(2)

   由于x是已知的,所以公式(2)中的p(x)可以省去,故公式(2)可以用公式(3)

(3)

    在HMM中,我们实际使用公式(4)的形式来求解,公式(3)使用条件概率公式可得公式(4)

(4)

 

2、HMM是一种有监督学习,需要有训练数据训练参数。

    图2为一条训练数据,已知句子x的词性y,其中PN为名词,V为动词,D为冠词,N为名词。

图2已知句子x的词性y

可得P(y)公式(5)

   

                                      

                                         

                                         

(5)

则可得公式(6)

                                   

                                      

                                      

(6)

将其一般化,可将第一步的概率P(y)称为转移概率(transition probability),第二步的概率称为输出概率(emission probability)。其概率值都可以通过训练数据得到。

第1步P(y) 转移概率可表示为公式(7)

(7)

第2步输出概率可表示为公式(8)

(8)

将公式(7)(8)带入公式(4)即为HMM模型,如公式(9)所示。

 

             

(9)

 

 

二、HMM具体举例,使用Viterbi算法

1、问题

假设已知:

                   第1天小明感觉正常。

                  第2天小明感觉有点冷。

                  第3天小明觉有点头晕。

      小明的身体观察序列x为:正常、冷、头晕

      小明身体的隐藏状态有2种分别为:健康、发烧

求已知x的情况下,推断出小明每一天的身体状态呢?

 

2、转化为数学语言

     正常、冷、头晕分别用0、1、2表示;健康、发烧分别用A、B表示。

    则小明的观察序列x为:0,1,2

   小明身体的隐藏状态有2种分别为:A、B

 

已知概率:

1)初始概率

                      

                     

2)转移概率

               

              

3)输出概率

             

             

 

3、问题进一步具体化

求:推断出小明每一天的身体状态呢?

已知:观察序列x和HMM模型。HMM模型即为初始概率、转移概率、输出概率。

 

4、求解,使用维特比算法

1)第1天 l=1, 取值为0,  的取值为A或B

       由HMM模型公式(9)可得到公式(10)

(10)

            注意:这里实际为

       当时, 带入公式(10)可得到公式(11)

        

                                           

       

(11)

       当时, 带入公式(10)可得到公式(12)                         

 

                             

                            

                            

(12)

 

2)第2天 l=2,取值为1,  的取值为A或B

           由HMM模型公式(9)可得到公式(13)

(13)

       1、)当时,公式(13)可化为公式(14)

                    

                  

                   

                  

(14)

               公式(14)中的可取A或B,此时由公式(9)可得公式(15)

                              

                              

                              

                              

                              

(15)

                由公式(15)可看出,当取A时,概率最大,记录此条路径。

这里在解释一下:

       当前观测值为1,假定当前隐含状态为健康A,求当前的联合概率分布 。首先从昨天的状态到当前的健康A状态有两种路径(昨天的状态还没确定,而只是先计算出每个状态的概率分布): 昨天健康A ----> 今天健康A,   昨天发烧 B-----> 今天健康A。 这两个路径分别的概率为 0.3 * 0.7 以及 0.04 * 0.4, 可以看到 当前如果为健康A时,昨天为健康A的概率更大,因此我们选定昨天健康 A----> 今天健康A 这条路径,即记录下当前为健康A时,昨天也为健康A状态, 然后求得当前的联合概率分布 = (0.3 * 0.7 ) * 0.4即如下:

  = max{0.3*0.7, 0.04*0.4} * 0.4=0.3* 0.7 * 0.4=0.084

此时我们需要记录概率最大的路径的前一个状态,即0.084路径的前一个状态,我们在小本本上记下,第二天健康A时,第一天的状态也为健康A。

        2、)当时,公式(13)可化为公式(16)

                    

                  

                  

                  

(16)

                 公式(16)中的可取A或B,此时由公式(9)可得公式(17)

                                

                                                                        

                                

                                

                                

(17)

            由公式(17)可看出,当取A时,概率最大,记录此条路径。

                   一样的道理,从昨天的状态到当前的发烧B状态也有两种路径:  昨天健康A ----> 今天发烧B,   昨天发烧B -----> 今天发烧B,这两个路径分别的概率为 0.3 * 0.3以及 0.04 * 0.6, 可以看到 当前如果为发烧B时,昨天为健康A的概率更大,因此我们选定昨天健康A ----> 今天发烧B 这条路径,即记录下当前为发烧B时,昨天也为健康B状态, 当前的联合概率分布= (0.3 * 0.3 ) * 0.3, 即如下:

= max{0.3*0.3,  0.04*0.6} * 0.3=0.027,

同样的在0.027这个路径上,第二天为发烧B时,第一天也是健康A的。

 

3) 第3天 l=3, 取值为2, 的取值为A或B

           由HMM模型公式(9)可得到公式(18)

                      

        

       

(18)

          1、) 的取值为A,公式(18)可化为公式(19)

                   

      

      

(19)

                   公式(19)中的可取A或B,此时由公式(9)可得公式(20)

                           

                          

                          

                          

                          

(20)

               由公式(20)可看出,当取A时,取A时;概率最大,记录此条路径。

 

                2、)  的取值为B,公式(18)可化为公式(21)

                                 

                    

                    

(21)

                     公式(21)中的可取A或B,此时由公式(9)可得公式(22)

                           

                                                                  

                                                               

                                                               

                                                               

(22)

                      由公式(22)可看出,当取B时,取A时;概率最大,记录此条路径。

4)到第三天是最后一天, 此时看第三天为发烧B时状态概率最大,即为最优状态,即P(最优)=0.01512,这样我们可以得到最优路径的终点,是发烧B状态。

             由最优状态开始回溯。根据前面所记录的, 在求得第三天发烧的时候,我们记录的第二天最大概率的状态为健康A,因此确定第二天为健康A状态,继续回溯,当第二天为健康A状态时,我们记录的第一天是健康A的。这样,我们的状态序列逆推出来了。即为:健康A,健康A,发烧B;这就是小明这3天的身体状态。

 

5)别人也给出了一个HMM概率图 可以参考下:

图3   HMM概率图

 

 

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

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

相关文章

java 大文件 处理_用Java处理大文件

java 大文件 处理我最近不得不处理一组包含历史逐笔交易的外汇市场数据的文件,并很快意识到使用传统的InputStream都无法将它们读取到内存中,因为每个文件的大小都超过4 GB。 Emacs甚至无法打开它们。 在这种特殊情况下,我可以编写一个简单的…

python项目结构目录结构采用的是_python 项目目录结构设置

python 项目目录结构设置为项目设置目录结构是为了将功能类似的文件放置在同一目录内,增强项目的可读性和可维护性。如果一个python项目功能单一,代码量很小,那就没必要设置的这么复杂。下图是一个示例项目的目录结构:1&#xff0…

HMM和CRF 条件随机场详解

转载于 https://blog.csdn.net/qq_42901761/article/details/104206799 这位大神ffffatgoose总结的很好

使用Spring Cloud Config作为外部化配置

关于连续交付 ,最重要的实践之一是只构建一次二进制文件,并在不同的环境(开发,测试,验收等)中使用该二进制文件 。 这意味着最有可能需要外部化应用程序的配置 。 对于Spring Boot应用程序,将其…

51nod1040 最大公约数之和,欧拉函数或积性函数

1040 最大公约数之和 给出一个n&#xff0c;求1-n这n个数&#xff0c;同n的最大公约数的和。比如&#xff1a;n 6时&#xff0c;1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6&#xff0c;加在一起 15 看起来很简单对吧&#xff0c;但是n<1e9&#xff0c;所以暴力是不行的…

hide show vue 动画_Vue2.x学习四:过渡动画

Vue 在插入、更新或者移除 DOM 时&#xff0c;提供多种不同方式的应用过渡效果。请注意它的应用场景并不是说我们写了一个动画之后让它一直在动&#xff0c;而是在一个模块显示或隐藏的时候去做一种特效&#xff0c;使得它的过程有过渡性&#xff0c;而不是很突兀的直接消失或显…

Pytorch cifar10离线加载二进制文件

说明直接离线加载cifar10到Pytorch 直接加载6个文件到pytorchdata_batch_1data_batch_2data_batch_3data_batch_4data_batch_5test_batchimport os import cv2 import pickle import numpy as np import matplotlib.pyplot as pltimport torchvision from torch.autograd impor…

spring cloud gateway 深入了解 - Predicate

文章来源 spring cloud gateway 通过谓词&#xff08;Predicate&#xff09;来匹配来自用户的请求 为了方便&#xff0c;使用postman测试不同的谓词的效果 路径谓词&#xff08;Predicate&#xff09;—— 最简单的谓词 配置如下spring:cloud:gateway:routes:# 匹配指定路径的路…

python漏洞检测脚本_URL重定向漏洞,python打造URL重定向漏洞检测脚本

前言&#xff1a;今天学习了重定向漏洞&#xff0c;这个漏洞比较好理解漏洞名&#xff1a;URL重定向漏洞威胁&#xff1a;低漏洞的来源&#xff1a;开发者对head头做好对应的过滤和限制例子&#xff1a;有漏洞的网站&#xff1a;http://a.com/x.php?urlhttp://a.com/login.php…

Pytorch cifar100离线加载二进制文件

说明&#xff1a;直接加载cifar100二进制文件到Pytorch 直接加载文件到pytorchmetatesttrain import os import cv2 import pickle import time import numpy as np import matplotlib.pyplot as pltimport torchvision from torch.autograd import Variable import torch.uti…

为单个Web应用程序配置多个上下文根– JBoss

有时&#xff0c;我们通过在jboss-web.xm l中定义一个来对应用程序进行更改&#xff0c;以支持利用JBoss功能的多个上下文根&#xff0c;如下所示&#xff1a; webapp / WEB-INF / jboss-web.xml&#xff1a; <?xml version"1.0" encoding"UTF-8"?&…

手动升级ubuntu 18.04内核从4.15.0-45-generic到4.15.0-52-generic

1 从下面官网下载相应的包&#xff0c;共3个。 https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15-rc9/ linux-headers-4.15.0-041500rc9-generic_4.15.0-041500rc9.201801212130_amd64.deb linux-headers-4.15.0-041500rc9_4.15.0-041500rc9.201801212130_all.deb linux-…

cmd52命令发送 mmc_乾坤合一~Linux SD/MMC/SDIO驱动分析(上)

一、SD/MMC/SDIO概念区分SD(SecureDigital)与 MMC(MultimediaCard)SD 是一种 flash memory card 的标准&#xff0c;也就是一般常见的 SD 记忆卡&#xff0c;而 MMC 则是较早的一种记忆卡标准&#xff0c;目前已经被 SD 标准所取代。在维基百科上有相当详细的 SD/MMC 规格说明&…

Pytorch MNIST直接离线加载二进制文件到pytorch

说明&#xff1a;MNIST直接离线加载二进制文件到pytorch 直接以下4个文件读入数据到pytorch中t10k-images-idx3-ubyte.gzt10k-labels-idx1-ubyte.gztrain-images-idx3-ubyte.gztrain-labels-idx1-ubyte.gz import os import numpy as np import gzipimport torch.utils.data a…

爱与愁的心痛

爱与愁的心痛 题目链接 题意 这道题的题意是&#xff0c;给定一个整数数组&#xff0c;数组中的每个元素代表一个不爽的事情的刺痛值。现在需要找出连续m个刺痛值的和的最小值。 思路 读取输入和初始化遍历数组并计算窗口和输出最小和 坑点 数组越界重复计算窗口和 算法一&am…

begintrans返回值_SQL事务回滚 ADO BeginTrans, CommitTran 以及 RollbackTrans 方法

定义和用法这三个方法与 Connection 对象使用&#xff0c;来保存或取消对数据源所做的更改。注释&#xff1a;并非所有提供者都支持事务。注释&#xff1a;BeginTrans、CommitTrans 和 RollbackTrans 方法在客户端 Connection 对象上无效。那客户端不能支持事务? 这是什么意思…

Pytorch Fashion_MNIST直接离线加载二进制文件到pytorch

说明&#xff1a;Fashion_MNIST直接离线加载二进制文件到pytorch 将4个gz直接加载到pytoch用来训练t10k-images-idx3-ubyte.gzt10k-labels-idx1-ubyte.gztrain-images-idx3-ubyte.gztrain-labels-idx1-ubyte.gz import os import numpy as np import gzip import matplotlib.p…

jQuery选择器种类整理

选择器概念 jQuery选择器是通过标签、属性或者内容对HTML内容进行选择&#xff0c;选择器运行对HTML元素组或者单个元素进行操作。 jQuery选择器使用$符号&#xff0c;等同于jquery&#xff0c;例如&#xff1a; $(“li”) jquery(“li”) 同样等同于javascript中的&#xff1…

jee过滤器应用场景_将涡轮增压器添加到JEE Apps

jee过滤器应用场景我扮演的关键角色之一是在本地社区中传播Akka。 作为讨论的一部分&#xff0c;人们通常会想到的问题/疑问是Akka如何针对编写良好的Java / JEE应用程序提供更好的可伸缩性和并发性。 由于底层硬件/ JVM保持不变&#xff0c;因此参与者模型如何比传统的JEE应用…

mysql 列 随机数_mysql mmp 某字段插入随机数!(说不定那天就忘记了,存下来再说)...

UPDATE 表名 SET 字段名ceiling(rand()*500000500000) WHERE (条件);原文链接&#xff1a;http://blog.csdn.net/bobay/article/details/24797525MMP 上面的只能更新一条UPDATE 表名 SET 字段名cast(rand(checksum(newid()))*(24)1 as int) WHERE (条件);上面的就是每条都更新的…