马尔科夫模型

马尔科夫模型是单重随机过程,是一个2元组:(S,A)。

当中S是状态集合,A是状态转移矩阵。

仅仅用状态转移来描写叙述随机过程。

马尔科夫模型的2个如果

有限历史性如果:t+l时刻系统状态的概率分布仅仅与t时刻的状态有关,与t时刻曾经的状态无关;

齐次性如果:从t时刻到t+l时刻的状态转移与t的值无关。

以天气模型为例

天气变化有3中状态S:{1(阴),2(云),3(晴)}

图片来自网络

则状态转移矩阵A:

这样,仅仅要知道的初始状态概率向量,就能预測接下来每天的天气了。

隐马尔科夫模型

隐马尔科夫模型是双重随机过程,是一个5元组:

V是输出集合。

表示在状态j时输出k的概率。

是初始状态概率。

用状态转移和输出概率一起来描写叙述随机过程。

以扔硬币模型为例

有个小孩手上拿着3个各不同样,也正反不均匀的硬币。他每次随机抽取1个硬币扔,扔了非常多次(比方10次),他并不告诉你他每次抽中的是哪个硬币。可是他会告诉你每次的正反结果:正正反正反正正正……

在这个问题中,我们知道观察序列(硬币的正反),可是小孩手上硬币类型的变换序列被隐藏起来了,我们不知道小孩每次拿的哪个硬币扔,因此是双重随机过程。这就隐马尔科夫过程。

这里如果模型參数已知:

A=[0.90.05 0.05;0.45 0.1 0.45;0.45 0.45 0.1];
B=[0.50.75 0.25;0.5 0.25 0.75];
Pi=[1/31/3 1/3]';

隐马尔科夫模型的3个问题

1.【概率问题】给定上述模型,观察到[正正反]的概率是多少?

O=[11 2];

2.【预測问题】给定上述模型,假设观察到上述结果,最可能的硬币转换序列(状态转换序列)是什么?

3.【学习问题】不告诉你模型參数,怎样依据观察序列得到它们?

【概率问题】

1.向前算法

向前变量:给定模型,在时刻t,状态为i,且之前的观察序列例如以下的概率。

显然有

Alpha=zeros(3,N);
Beta=zeros(3,N);
Lambda=zeros(3,N); Alpha(:,1)=B(O(1),:)'.*Pi;
Delta=Alpha;
fori=2:N
Alpha(:,i)=A'*Alpha(:,i-1).*B(O(i),:)';
end
Q1_1=sum(Alpha(:,N));

输出

Alpha=
0.166666666666667 0.150000000000000 0.0867187500000000
0.250000000000000 0.0531250000000000 0.00683593750000000
0.0833333333333333 0.0322916666666667 0.0259765625000000 Q1_1=0.119531250000000

2.向后算法

向后变量:给定模型,在时刻t,状态为i,且之后的观察序列例如以下的概率。

显然有

Beta(:,N)=ones(N,1);
fori=N:-1:2
Beta(:,i-1)=bsxfun(@times,A,B(O(i),:))*Beta(:,i);
end
Q1_2=sum(Pi.*B(1,:)'.*Beta(:,1));

输出

Beta=
0.252187500000000 0.500000000000000 1
0.202968750000000 0.587500000000000 1
0.321093750000000 0.412500000000000 1 Q1_2=0.119531250000000

【预測问题】

Viterbi算法

Viterbi变量:给定模型,在时刻t,状态为i,观察到的最佳转换序列为的概率。

显然有

这里须要把最佳路径记录下来

Q2=zeros(1,N);
fori=2:N
Delta(:,i)=max(bsxfun(@times,A,Delta(:,i-1)))'.*B(O(i),:)';
[~,Lambda(:,i)]=max(bsxfun(@times,A,Delta(:,i-1)));
end
[~,Q2(N)]=max(Delta(:,N));
fori=N:-1:2
Q2(i-1)=Lambda(Q2(i),i);
end

输出

Delta=
0.166666666666667 0.0750000000000000 0.0337500000000000
0.250000000000000 0.0281250000000000 0.00316406250000000
0.0833333333333333 0.0281250000000000 0.00949218750000000

最优序列

1     1     1

【学习问题】

1.有监督模式

在有大量标签数据下,直接用频率近似概率參数就可以。

2.无监督模式

Baum-Welch算法

定义变量:在给定模型和观察序列O,在t时刻状态为i,在t+1时刻状态为j的概率

则关于模型參数的一种预计方法为

欢迎參与讨论并关注本博客微博以及知乎个人主页兴许内容继续更新哦~

转载请您尊重作者的劳动,完整保留上述文字以及文章链接,谢谢您的支持!

隐马尔科夫模型(HMM)及事实上现的更多相关文章

  1. 隐马尔科夫模型HMM学习最佳范例

    谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...

  2. 猪猪的机器学习笔记(十七)隐马尔科夫模型HMM

    隐马尔科夫模型HMM 作者:樱花猪 摘要: 本文为七月算法(julyedu.com)12月机器学习第十七次课在线笔记.隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来 ...

  3. 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...

  4. 隐马尔科夫模型HMM(一)HMM模型

    隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...

  5. 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...

  6. 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...

  7. 用hmmlearn学习隐马尔科夫模型HMM

    在之前的HMM系列中,我们对隐马尔科夫模型HMM的原理以及三个问题的求解方法做了总结.本文我们就从实践的角度用Python的hmmlearn库来学习HMM的使用.关于hmmlearn的更多资料在官方文 ...

  8. 机器学习之隐马尔科夫模型HMM(六)

    摘要 隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔科夫过程.其难点是从可观察的参数中确定该过程的隐含参数,然后利用这些参数来作进一步 ...

  9. 隐马尔科夫模型HMM

    崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首先,本 ...

  10. 隐马尔科夫模型HMM介绍

    马尔科夫链是描述状态转换的随机过程,该过程具备“无记忆”的性质:即当前时刻$t$的状态$s_t$的概率分布只由前一时刻$t-1$的状态$s_{t-1}$决定,与时间序列中$t-1$时刻之前的状态无关. ...

随机推荐

  1. TApplication.Initialize的前世今生

    ---------------------------------------------------------------------------------------------------- ...

  2. uploadify,实际开发案例【选择完文件点击上传才上传】

    <script type="text/javascript"> )+Math.floor(Math.random()*)+']-'; //设置随机文件前缀. $k(fu ...

  3. POJ 3007 Organize Your Train part II

    题意: 如上图所示,将一个字符串进行分割,反转等操作后不同字符串的个数: 例如字符串abba:可以按三种比例分割:1:3:2:2:3:1 部分反转可以得到如下所有的字符串: 去掉重复可以得到六个不同的 ...

  4. OCA读书笔记(7) - 管理数据库存储结构

    7.Managing Database Storage Structures 逻辑结构 数据库的存储结构有物理结构和逻辑结构组成的 物理结构:物理上,oracle是由一些操作系统文件组成的 SQL&g ...

  5. 如何在eclipse dump Java内存占用情况和打印GC LOG

     当使用java开发应用程序发生内存泄露的时候,经常会需要dump内存,然后使用内存分析工具,比如Eclipse Memory Analyzer(一般称作MAT)工具. 本文将介绍如何在eclipse ...

  6. 14.4.3.3 Making the Buffer Pool Scan Resistant

    14.4.3.3 Making the Buffer Pool Scan Resistant 让Buffer Pool 扫描 相比使用一个严格的LRU算法, InnoDB 使用一个技术来最小化数据的总 ...

  7. 验证码 Captcha 之大插件

    验证码 Captcha 之大插件小用 不知何年何月才能完成OADemo啊,总之还是一步一步来吧,这段时间开始着手了,先做登陆.  前段时间研究了一下在CentOS7下安装Mysql和Memcached ...

  8. [Android]mac下开发环境搭建

    好像没神马好些的? 1.下载adt-bundle-mac-x86_64bit(http://developer.android.com/sdk/installing/bundle.html) 2.解压 ...

  9. Android开发者必须深入学习的10个应用开源项目

    Android 开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项 目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的 ...

  10. android 在你的UI中显示Bitmap - 开发文档翻译

    由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接链接 Displaying Bitmaps in Your UI 在你的UI中显示Bitmap ...