马尔科夫模型

马尔科夫模型是单重随机过程,是一个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. Marshal UTF8 Strings in .NET

    原文:Marshal UTF8 Strings in .NET Marshal UTF8 Strings in .NET Wow, what a pain in the butt. .NET stri ...

  2. c vs c++ in strcut and class

    c vs c++ in strcut and class 总习惯用c的用法,现在学习C++,老爱拿来比较.声明我用的是g++4.2.1 SUSE Linux.看例子吧 #include <ios ...

  3. 一场刺激的游戏——很文艺的山东省第四届ACM赛总结(菜鸟版)

               人生就像一个个节点,节点中或许有成功,失败,满足,遗憾,但是只要它是不可复制的,在日后,便是美好.                                         ...

  4. Swift - 控制流/控制结构说明(if,switch,for,while)

    1,if语句 1 2 3 4 5 if count >=3 {     println("yes") }else{     println("no") } ...

  5. 虚继承之单继承的内存布局(VC在编译时会把vfptr放到类的头部,这和Delphi完全一致)

    C++2.0以后全面支持虚函数与虚继承,这两个特性的引入为C++增强了不少功能,也引入了不少烦恼.虚函数与虚继承有哪些特性,今天就不记录了,如果能搞了解一下编译器是如何实现虚函数和虚继承,它们在类的内 ...

  6. Python语法

  7. poj 1611 The Suspects(并查集)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 21598   Accepted: 10461 De ...

  8. Wi-Fi万能钥匙:说是破解,其实有危险(转)

    Wi-Fi 万能钥匙如此危险,怎样做才能让这种可能严重侵害公众利益的 app 在中国消失? 这个“钥匙”为什么能够破解 Wi-Fi?它真的是“破解” Wi-Fi 吗?两年前我就有这个疑问了,原谅我对一 ...

  9. 图像特征提取方法:Bag-of-words

    Bag-of-words简单介绍 最初的Bag-of-words ,也叫做"词袋",在信息检索中,Bag-of-words model假定对于一个文本,忽略其词序和语法,句法,将其 ...

  10. oracle 之 内存—鞭辟近里(一)

    oracle 之 内存—鞭辟近里(一) 今天是2013-07-8日,这几天一直都在寻找一本深入研究oracle内存的书籍,期间一波三折弄的自己神魂颠倒,但是还是被我拿下了,感谢支持我的朋友,这周打算把 ...