隐藏马尔科夫模型HMM

概率图模型
image

HMM

先从一个具体的例子入手,看看我们要解决的实际问题.例子引自wiki.https://en.wikipedia.org/wiki/Hidden_Markov_model

Consider two friends, Alice and Bob, who live far apart from each other and who talk together daily over the telephone about what they did that day. Bob is only interested in three activities: walking in the park, shopping, and cleaning his apartment. The choice of what to do is determined exclusively by the weather on a given day. Alice has no definite information about the weather, but she knows general trends. Based on what Bob tells her he did each day, Alice tries to guess what the weather must have been like.
Alice believes that the weather operates as a discrete Markov chain. There are two states, "Rainy" and "Sunny", but she cannot observe them directly, that is, they are hidden from her. On each day, there is a certain chance that Bob will perform one of the following activities, depending on the weather: "walk", "shop", or "clean". Since Bob tells Alice about his activities, those are the observations. The entire system is that of a hidden Markov model (HMM).

简单翻译一下:Alice和Bob住在两地,每天电话沟通.Bob只对三件事有兴趣:逛公园,购物,打扫房间.Bob根据天气安排自己每日的活动.Alice知道bob每天都干嘛,以此为基础,她可以推测出Bob所在地区的天气.Alice认为天气预测就是一个马尔科夫链.天气有两种状态,Rainy/Sunny,由于她无法直接观测到天气状态,天气对她而言是隐藏的.

马尔科夫假设:

假设模型的当前状态仅仅依赖于前面的几个状态,这被称为马尔科夫假设,它极大地简化了问题。显然,这可能是一种粗糙的假设,并且因此可能将一些非常重要的信息丢失。

一个马尔科夫过程是状态间的转移仅依赖于前n个状态的过程。这个过程被称之为n阶马尔科夫模型,其中n是影响下一个状态选择的(前)n个状态。

最简单的马尔科夫过程是一阶模型,它的状态选择仅与前一个状态有关.

比如今天的天气和昨天的天气有关.如下:
image

隐藏马尔科夫

回到我们的例子,当我们有足够多的天气资料以后,我们是可以根据昨天的天气推测出最有可能的的今天的天气的.比如昨天晴天,那求p(晴天|晴天),p(阴天|晴天)的概率,取二者之中较大的一个即可.
image
这个例子里天气状况我们称之为状态,相应的概率矩阵称之为状态转移矩阵.一个有M个状态的马尔科夫模型有\(M^2\)个状态转移.

现在我们定义一个一阶马尔科夫过程如下: 状态:三个状态——晴天,多云,雨天。 pi向量:定义系统初始化时每一个状态的概率。 状态转移矩阵:给定前一天天气情况下的当前天气概率。
任何一个可以用这种方式描述的系统都是一个马尔科夫过程。

但是考虑我们的例子中,Alice虽然每日与Bob通话,但是Bob并不会告诉他当地天气情况,只会告诉他自己每天干了啥(逛公园/购物/打扫房间等).所以天气状态对Alice来说是隐藏(Hidden)的,Alice并不知道每日天气,他能事先知道的只有阴天后,第二天是阴天/晴天的概率,即状态转移矩阵。

天气状态是隐藏状态,Bob的每日活动(逛公园/购物/打扫房间)是观察状态.
image
图文不符,凑合看,领会意图....假装soggy/damp/...代表逛公园/购物/打扫房间....

对每一种隐藏状态,都有与之对应的观测状态,和前面的状态转移概率矩阵一样,我们有如下的概率矩阵称之为混淆矩阵:
image

至此,一个HMM模型所包含的要素如下:

  • 隐藏状态
  • 观测状态
  • pi向量 模型初始隐藏状态的概率
  • 转移矩阵:状态转移的概率矩阵
  • 混淆矩阵(有的翻译成发射概率矩阵):隐藏状态与观察状态的对应概率矩阵

alice预测bob所在地区天气用HMM建模可以表达如下:

 #隐藏状态states = ('Rainy', 'Sunny')#观测状态observations = ('walk', 'shop', 'clean')#初始pi向量start_probability = {'Rainy': 0.6, 'Sunny': 0.4}#状态转移矩阵transition_probability = {'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},}#混淆矩阵.比如如下数据代表阴天时,bob有0.1的概率逛公园,0.4的概率散步,0.5的概率做清洁.emission_probability = {'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1},}

HMM解决的三个基本问题

  • 给定HMM求一个观察序列的概率(评估) 使用前向算法解决
  • 搜索最有可能生成一个观察序列的隐藏状态序列(解码)使用维特比算法解决
  • 是给定观察序列生成一个HMM(学习)使用前向-后向算法解决

对应到alice-bob的例子里即我们通过大量样本的训练已经得到了一个HMM的model.
Alice和Bob通了三天电话后发现第一天Bob去散步了,第二天他去购物了,第三天他清理房间了。Alice现在有两个问题:

  • 这个观察序列“散步、购物、清理”的总的概率是多少?(注:这个问题对应于HMM的基本问题之一:已知HMM模型λ及观察序列O,如何计算P(O|λ)?)
  • 最能解释这个观察序列的状态序列(晴/雨)又是什么?(注:这个问题对应HMM基本问题之二:给定观察序列O=O1,O2,…OT以及模型λ,如何选择一个对应的状态序列S = q1,q2,…qT,使得S能够最为合理的解释观察序列O?)
  • 至于HMM的基本问题之三:如何调整模型参数, 使得P(O|λ)最大?这个问题事实上就是给出很多个观察序列值,来训练以上几个参数的问题。

算法

  • 前向算法
  • 维特比算法
  • 前向-后向算法

HMM应用

  • 词性标注
  • 中文分词

HMM与CRF关系

比如要给"i love you"进行词性标注.
那么HMM中的"隐藏状态"即为词性(名词/动词/形容词/...)
HMM中的"观测状态"即为我们看到的具体的词(i/love/you)
实际上我们要做的就是求解p(l,s)哪种l使其最大?
其中s="i love u",对l1=(名词/动词/名词),我们可以计算出一个p1=p(l1,s),对l2=(名词/名词/名词),我们可以计算出一个p2=p(l2,s).自然地,对一个模型来说,应该算出的是p1>p2. 那么我们就把"i love u"标注为"名词/动词/名词"

如何计算p(l,s)
583030-20190214101616490-1190845444.png
还是以上面的"i love u"为例,l=(名词/动词/名词)

  • p(li|li−1) 状态转移概率 (比如l2=动词,l1=名词,则代表名词后面接动词的概率);
  • p(wi|li) 发射概率(也就是之前例子里说的混淆矩阵概率) (比如l2=动词 w2="love" 代表一个动词是单词"love"的概率)

注意我们在条件随机场https://www.cnblogs.com/sdu20112013/p/10370334.html里提到的583030-20190214101656621-1490334591.png

对一个HMM来说,对概率取对数可得583030-20190214102001071-117406591.png

我们可以构建一个等价于该HMM的CRF
583030-20190214101729960-86534844.png

  • 对每一个状态转移概率,都可以创建一个特征函数f,给一个权重w
  • 对每一个发射概率,也可以定一个特征函数g,给一个权重w
    这样crf计算出来的p(l,s)和HMM计算出来的p(l,s)就等价了.
    也就是说每一个HMM都可以用某一个CRF来表达

crf比HMM更强大
583030-20190214101752781-4513324.png

  • crf可以定制更多的特征函数 比如对"is that ok?"做词性标注.用crf的话,我们可以定义一个特征函数:一个以?结尾的句子的第一个单词更可能是动词. 在HMM中我们没办法表达这个信息. 从而crf的标注的准确率可以更高.
  • crf可以有更多样的权重. hmm里权重是可以任意的,正的,负的都可以.

转载于:https://www.cnblogs.com/sdu20112013/p/10373091.html

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

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

相关文章

阿里云天池 金融风控训练营Task1 广东工业站

Task1 赛题理解 一、学习知识点概要 本次学习先是介绍了赛题的背景和概况,题目以金融风控中的个人信贷为背景,给所给的47列特征中,根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过贷款。随后介绍了比赛中的评…

如何将.crt的ssl证书文件转换成.pem格式

如何将.crt的ssl证书文件转换成.pem格式摘自:https://www.landui.com/help/show-8127 2018-07-04 14:55:41 2158次 准备:有一台安装了php的linux操作系统执行下面的openssl命令即可:openssl x509 -in www.xx.com.crt -out www.xx.com.pem转载于:https://…

SpringMVC学习记录--Validator验证分析

一.基于Validator接口的验证. 首先创建User实例,并加入几个属性 ?12345678910111213141516171819202122232425262728293031323334<code class"hljs cs">public class User {private String username;private String password;private String nickname;public …

C# 获取句柄程序

这个小程序需要用到系统API&#xff0c;也就是需要用到user32中的三个函数。 第一个&#xff1a;WindowFromPoint 返回一个窗口句柄 第二个&#xff1a;GetWindowText 获取窗口标题 第三个&#xff1a;GetClassName 获取类名 当然&#xff0c;最重要的一点就是要引用命名空间…

centos7安装oracle12c 一

本文 基本参考了下面这篇文章http://blog.csdn.net/gq5251/article/details/42004035 和http://www.linuxidc.com/Linux/2017-08/146528.htm 但是改正了一些错误操作系统:CentOS Linux release 7.2.1511 (Core) oracle: oarcle (12.1.0.2.0) - Standard Edition (SE2)几点要注…

阿里云天池 Python训练营Task4: Python数据分析:从0完成一个数据分析实战 学习笔记

本学习笔记为阿里云天池龙珠计划Python训练营的学习内容&#xff0c;学习链接为&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 一、学习知识点概要 本次主要通过阿里云天池的赛题【Python入门系…

JMETER从JSON响应中提取数据

如果你在这里&#xff0c;可能是因为你需要使用JMeter从Json响应中提取变量。 好消息&#xff01;您正在掌握掌握JMeter Json Extractor的权威指南。作为Rest API测试指南的补充&#xff0c;您将学习掌握Json Path Expressions 所需的一切。 我们走吧&#xff01;并且不要惊慌&…

centos7安装oracle12c 二

环境&#xff1a;CentOS7VMware12&#xff0c;分配资源&#xff1a;CPU&#xff1a;2颗&#xff0c;内存&#xff1a;4GB&#xff0c;硬盘空间&#xff1a;30GB Oracle 12C企业版64位 下载地址&#xff1a;http://www.oracle.com/technetwork/database/enterprise-edition/down…

阿里云天池 Python训练营Task5:Python训练营测试 学习笔记

一、学习知识点概要 本次是Python训练营的测试&#xff0c;在45分钟内完成25题&#xff0c;满分100分及格80分。题目主要考察Task1到Task3里面的Python基础知识。在我随到的25道题里&#xff0c;知识点有&#xff1a; 变量&#xff08;包括数据类型和容器类型&#xff09;运算…

centos7安装oracle12c 三

场景描述&#xff1a;我在自己电脑的虚拟机上linux环境下安装oracle11g数据库。 Linux版本为&#xff1a;CentOS release 6.8 (Final)&#xff0c;Oracle版本为&#xff1a;linux.x64_11gR2 问题描述&#xff1a;在oracle安装到Prerequisite Checks这一步的时候&#xff0c;出现…

《属性数据分析引论》 部分课后习题R语言实践(第三章、第四章)

目录 前言 第三章 广义线性模型 习题3.18 a小题 b小题 c小题 d小题 习题3.19 a小题 b小题 c小题 第四章 Logistic回归 习题4.1 a小题 b小题 c小题 d小题 e小题 习题4.2 a小题 b小题 c小题 d小题 小结 前言 习题选自高等教育出版社译制&#xff0c;Alan A…

Linux下SVN搭建

在Linux系统中搭建svn服务所需要用到的软件叫做subversion&#xff0c;可以通过yum来进行安装&#xff0c;如图 安装好软件后第一件事就是创建一个仓库目录 [rootserver1 ~]# mkdir /svn 使用svn自带命令建立仓库 [rootserver1 ~]# svnadmin create /svn 进入该仓库&#xff0c…

可用于 线性判别、聚类分析 的R语言函数总结

一、判别分析 判别分析是一种分类技术&#xff0c;其通过一个已知类别的“训练样本”来建立判别准则&#xff0c;并通过预测变量来为未知类别的数据进行分类。根据判别的模型分为线性判别和非线性判别&#xff0c;线性判别中根据判别准则又分为Fisher判别&#xff0c;Bayes判别…

Android APK 打包过程 MD

Markdown版本笔记我的GitHub首页我的博客我的微信我的邮箱MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantaosina.comAndroid APK 打包流程 MD 目录 目录APK 的打包流程整体流程资源的编译和打包资源ID资源索引概况具体打包过程aapt阶段aidl阶段Java Compiler阶段dex阶段a…

可用于 主成分分析、R型因子分析、简单相应分析 的R语言函数总结

一、主成分分析 主成分分析是多元统计分析的一种常用的降维方法&#xff0c;它以尽量少的信息损失&#xff0c;最大程度将变量个数减少&#xff0c;且彼此间互不相关。提取出来的新变量成为主成分&#xff0c;主成分是原始变量的线性组合。 1.1 KMO检验和Bartlett球形检验 在…

持续集成之Jenkins安装部署

安装JDKJenkins是Java编写的&#xff0c;所以需要先安装JDK&#xff0c;这里采用yum安装&#xff0c;如果对版本有需求&#xff0c;可以直接在Oracle官网下载JDK。 [rootlinux-node1 ~]# yum install -y java-1.8.0 安装Jekins [rootlinux-node1 ~]# cd /etc/yum.repos.d/ […

jenkins svn tomcat ant自动部署

Jenkins Jenkins是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;功能包括&#xff1a; 1、持续的软件版本发布/测试项目。 2、监控外部调用执行的工作。 跟其他持续集成相比&#xff0c;它的主要优点有&#xff1a; 开源&#xff0c;即免…

553 mail from must equal authorized user解决方法

在配置发送邮件通知&#xff0c;验证其正确性时&#xff0c;出现"553 mail from must equal authorized user"提示的错误&#xff1b; 原因在于没有在"系统管理&#xff08;Manage Jenkins&#xff09;"的"系统设置&#xff08;Configure system&…

[Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)...

创建临时配置文件以在设备上运行您的应用程序而无需Xcode。在开始之前&#xff0c;您需要一个App ID&#xff0c;一个分发证书和多个注册设备。 有关完整的临时配置文件工作流程&#xff0c;请转到Xcode帮助中的分发到已注册设备&#xff08;iOS&#xff0c;tvOS&#xff0c;wa…

解决做好一个机器学习项目的3个问题

机器学习是目前人工智能最令人激动的研究方向之一。我们可能更关注机器学习算法的实现细节&#xff0c;沉浸于机器学习所需要的数学功底&#xff0c;但对于机器学习从业者来说&#xff0c;如何更好更快速的实现一个机器学习项目更值得关注。 正如吴恩达在《机器学习》这门课中所…