隐马尔科夫模型(HMM)及其实现
2016-01-26 11:20
204 查看
From:http://blog.csdn.net/ycheng_sjtu/article/details/38865395
马尔科夫模型
马尔科夫模型是单重随机过程,是一个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次),他并不告诉你他每次抽中的是哪个硬币。但是他会告诉你每次的正反结果:正正反正反正正正……
在这个问题中,我们知道观察序列(硬币的正反),但是小孩手上硬币类型的变换序列被隐藏起来了,我们不知道小孩每次拿的哪个硬币扔,因此是双重随机过程。这就隐马尔科夫过程。
这里假设模型参数已知:
[plain] view
plain copy
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.【概率问题】给定上述模型,观察到[正正反]的概率是多少?
[plain] view
plain copy
O=[11 2];
2.【预测问题】给定上述模型,如果观察到上述结果,最可能的硬币转换序列(状态转换序列)是什么?
3.【学习问题】不告诉你模型参数,如何根据观察序列得到它们?
【概率问题】
1.向前算法
向前变量:给定模型,在时刻t,状态为i,且之前的观察序列如下的概率。
显然有
[plain] view
plain copy
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));
输出
[plain] view
plain copy
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,且之后的观察序列如下的概率。
显然有
[plain] view
plain copy
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));
输出
[plain] view
plain copy
Beta=
0.252187500000000 0.500000000000000 1
0.202968750000000 0.587500000000000 1
0.321093750000000 0.412500000000000 1
Q1_2=0.119531250000000
【预测问题】
Viterbi算法
Viterbi变量:给定模型,在时刻t,状态为i,观察到的最佳转换序列为的概率。
显然有
这里需要把最佳路径记录下来
[plain] view
plain copy
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
输出
[plain] view
plain copy
Delta=
0.166666666666667 0.0750000000000000 0.0337500000000000
0.250000000000000 0.0281250000000000 0.00316406250000000
0.0833333333333333 0.0281250000000000 0.00949218750000000
最优序列
[plain] view
plain copy
1 1 1
【学习问题】
1.有监督模式
在有大量标签数据下,直接用频率近似概率参数即可。
2.无监督模式
Baum-Welch算法
定义变量:在给定模型和观察序列O,在t时刻状态为i,在t+1时刻状态为j的概率
令
则关于模型参数的一种估计方法为
马尔科夫模型
马尔科夫模型是单重随机过程,是一个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次),他并不告诉你他每次抽中的是哪个硬币。但是他会告诉你每次的正反结果:正正反正反正正正……
在这个问题中,我们知道观察序列(硬币的正反),但是小孩手上硬币类型的变换序列被隐藏起来了,我们不知道小孩每次拿的哪个硬币扔,因此是双重随机过程。这就隐马尔科夫过程。
这里假设模型参数已知:
[plain] view
plain copy
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.【概率问题】给定上述模型,观察到[正正反]的概率是多少?
[plain] view
plain copy
O=[11 2];
2.【预测问题】给定上述模型,如果观察到上述结果,最可能的硬币转换序列(状态转换序列)是什么?
3.【学习问题】不告诉你模型参数,如何根据观察序列得到它们?
【概率问题】
1.向前算法
向前变量:给定模型,在时刻t,状态为i,且之前的观察序列如下的概率。
显然有
[plain] view
plain copy
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));
输出
[plain] view
plain copy
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,且之后的观察序列如下的概率。
显然有
[plain] view
plain copy
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));
输出
[plain] view
plain copy
Beta=
0.252187500000000 0.500000000000000 1
0.202968750000000 0.587500000000000 1
0.321093750000000 0.412500000000000 1
Q1_2=0.119531250000000
【预测问题】
Viterbi算法
Viterbi变量:给定模型,在时刻t,状态为i,观察到的最佳转换序列为的概率。
显然有
这里需要把最佳路径记录下来
[plain] view
plain copy
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
输出
[plain] view
plain copy
Delta=
0.166666666666667 0.0750000000000000 0.0337500000000000
0.250000000000000 0.0281250000000000 0.00316406250000000
0.0833333333333333 0.0281250000000000 0.00949218750000000
最优序列
[plain] view
plain copy
1 1 1
【学习问题】
1.有监督模式
在有大量标签数据下,直接用频率近似概率参数即可。
2.无监督模式
Baum-Welch算法
定义变量:在给定模型和观察序列O,在t时刻状态为i,在t+1时刻状态为j的概率
令
则关于模型参数的一种估计方法为
相关文章推荐
- url去重
- iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)
- 动态引入javascript
- centos6安装新宋体
- 以Attention Model为例谈谈两种研究创新模式
- C#中数组、ArrayList和List三者的区别
- oralce用户解锁
- 在xib/storyboard里面设置imageview圆角半径
- AngularJS系列:2、AngularJS的“禅道(理念)”
- electron之Windows下使用 html js css 开发桌面应用程序
- URI 方法 encodeURI() encodeURIComponent() docodeURI() decodeURIComponent()
- response.setContentType()的作用及参数
- app微信支付
- 1.26
- 黑马程序员----五-数组
- lasso变形(一)----group lasso
- linux下SOCKET在connect时遇到Operation now in progress
- datatables 渲染标红
- linux常用命令—— 备份压缩(十五)
- 一期介绍VR的播客节目