数学建模社区-数学中国

标题: 隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱 [打印本页]

作者: 杨利霞    时间: 2020-5-9 17:36
标题: 隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱

9 S$ {' H. m, Y5 L3 D5 z9 z4 D0 G隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
- u! M* H- m% N5 E4 T
% ①定义一个HMM并训练这个HMM。$ L5 a" }3 f4 k
% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。4 _1 @3 q6 N$ A6 i' k* `
% 修改:旺齐齐
+ ?+ I2 Q8 }& C+ c% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
4 H; B) d& a; i, j# @9 J/ W0 \%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O:观察状态数
4 P1 u* u/ W0 Y. o$ PO = 7;
, a( e3 T& ]# P" J' d( B6 @O2 = 7;
* D& x, `3 U/ J% b$ ]2 }* ^" }5 P% Q:HMM状态数/ I/ [4 o7 o" C; g
Q = 5;
: G9 r: L2 O6 L$ V6 W8 E; GQ2 = 5;* p$ K( D. X7 }' M+ s$ Y" x
%训练的数据集,每一行数据就是一组训练的观察值, @- L* \, @- r: c0 Z$ d1 x8 G
data=[1,2,3,1,2,2,4,2,3,1,2,7,2;5 j; O9 g* v7 W7 N
      1,2,3,6,2,2,1,4,3,1,5,3,1;
# |$ P1 x9 L: l5 x7 a: T      1,2,3,1,2,5,1,2,4,1,2,3,2;
& c% }- q( ?: \4 e  c      1,2,7,1,2,2,1,2,5,1,2,4,1;
1 g. X3 u; m8 o" T      5,2,3,3,5,2,1,2,3,1,2,3,6;
" U) f! E! H4 U: Q  z- j      1,2,3,1,2,2,1,6,5,1,2,6,4;' V& x8 c5 E% a' f6 z0 O
      5,2,3,4,4,2,1,2,3,1,2,5,6;
3 z9 h+ t+ o9 b" M6 B- w" N5 c' |/ f      1,2,6,1,2,2,1,2,3,1,4,3,2;1 m, B  Z" h6 L7 j
      1,2,3,4,2,7,1,4,3,1,7,3,3;4 O- A- }' m. c7 \
      5,2,3,5,2,2,1,2,3,1,2,3,4;
8 y0 q7 }9 R6 h" ?/ S4 X$ A      5,2,4,1,2,2,5,2,3,7,1,6,2;]
- l4 u  r& T& K- D/ s( S
  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;. a  k0 n# _1 x2 b
          1,2,3,6,2,2,1,4,3,1,5,3,1;- ?2 y$ P; @/ l
          1,2,3,1,2,5,1,2,4,1,2,3,2;7 |# S; d! d: d$ N  V# T' g
          1,2,7,1,2,2,1,2,5,1,2,4,1;) }- O# r) o7 L( Z0 h
          5,2,3,3,5,2,1,2,3,1,2,3,6;
0 Y8 F. o; l$ Q1 \! ?6 {          1,2,3,1,2,2,1,6,5,1,2,6,4;
) o8 |5 r1 V4 P8 v          5,2,3,4,4,2,1,2,3,1,2,5,6;
& z8 w# L6 L6 p0 H& l, y4 e# ]          1,2,6,1,2,2,1,2,3,1,4,3,2;6 c% b- Q8 u/ d# `$ T
          1,2,3,4,2,7,1,4,3,1,7,3,3;8 D' q! ]5 P) }2 k& R  ?7 z
          5,2,3,5,2,2,1,2,3,1,2,3,4;; E9 j0 h- l3 H$ G4 D9 |# `
          4,2,5,1,2,2,6,2,3,7,1,6,4;]
% initial guess of parameters
/ Y( h% M+ l1 |* B  ^/ q& W% 初始化参数
6 u1 n+ g+ _2 M3 Q0 s# kprior1 = normalise(rand(Q,1));( p7 }2 d6 q, K
transmat1 = mk_stochastic(rand(Q,Q));
/ x  D- l: g$ T6 p' N( oobsmat1 = mk_stochastic(rand(Q,O));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
: R1 [/ ]! r! E& |- G3 @% 添加部分
$ b4 `9 F8 I2 {2 [2 d2 J    prior3 = normalise(rand(Q2,1));
& t, c) ]9 a1 [- ~- d8 N, P    transmat3 = mk_stochastic(rand(Q2,Q2));
" w- _* j* ?2 {& @3 X    obsmat3 = mk_stochastic(rand(Q2,O2));
; ~: I# \) V) {+ t( ?! n! n2 B%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% improve guess of parameters using EM
( k' ]# v4 Q3 z/ H  \# |- c% 用data数据集训练参数矩阵形成新的HMM模型/ b, }. o0 B' t) P: a, u% n' |
[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
# @( _8 [8 b3 ~% 训练后那行观察值与HMM匹配度( ^' Z+ z% b9 H( C1 a  |7 q
LL
" F) J' p$ \( L! V% 训练后的初始概率分布
6 k$ \* \/ O3 B" P' Wprior2! S) {- F  H) S0 Q0 o1 [3 S
% 训练后的状态转移概率矩阵
9 a" K; R3 |# A: Ttransmat28 F3 f0 m8 a, E% x4 {; ~
% 观察值概率矩阵- V6 ~5 [" k3 o% Q5 o/ ^; ?' l  A% Y
obsmat2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" Y' N  t# X" w6 c( n" Y$ ]! N
% 添加部分0 D9 f5 z8 x- v' o: g" c% c$ O
    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));8 O% T9 V; e6 g; V  s4 ^! q: x
    LL2, D; F( A" C; Z3 A1 }! v; ?" Z
    prior4: G( l# C) R9 c, N
    transmat4
* k6 T6 e* V( o" b4 z% Y* a    obsmat4) g! j* _, z: v( ^$ ~" S
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% use model to compute log likelihood
" q/ R: Y+ _) g+ A/ l; x- [4 c% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
8 K" u" K! [1 \: d% j  idata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]# g! ^; Z" c5 @0 a
loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)* w5 k0 C( z& `3 }9 Y4 l; v
% log lik is slightly different than LL(end), since it is computed after the final M step, G0 W+ i& G1 R1 L
% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
% path为viterbi算法的结果,即最大概率path
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" e8 P9 Y7 H* u+ }
% 添加部分- t4 R; h0 y7 v- U
loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)2 H' l- ?' e& e3 p( K
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  A: [# u5 R6 X% B$ O
B = multinomial_prob(data1,obsmat2);
5 }1 {) O5 }$ S. B8 rpath = viterbi_path(prior2, transmat2, B)
; @1 N. S. S1 \1 b# }7 Msave('sa.mat');
6 G: f/ y5 s4 K" r  n7 W3 F
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%! \+ E4 l* R# [/ W
% 添加部分/ Q$ V* @3 y( c1 \4 N) N
    B2 = multinomial_prob(data1,obsmat4);6 D- l7 t" S& b  Z; D% e6 R& z
    path2 = viterbi_path(prior4, transmat4, B2)' x5 A, [: S- t: M6 ~
    save('sa2.mat');
5 v' b0 S; y( k. _8 Z, \. `4 t& g' v    if loglik2 > loglik : b- R4 g' ^. i; q0 M6 m! x" f( r
        fuhe = 2% V7 u  O( S5 ^: g
    else
& z% I! w, j, k        fuhe = 1/ W/ _" p5 l& M1 j  `
    end      J( L) A" i; M3 s
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
------
运行结果
------
data =
     1     2     3     1     2     2     4     2     3     1     2     7     2
$ [$ @' h* h* \$ o3 q. a( e     1     2     3     6     2     2     1     4     3     1     5     3     1/ T2 ?0 Y: X2 B
     1     2     3     1     2     5     1     2     4     1     2     3     2* _# A# E2 T5 @! P, J3 w
     1     2     7     1     2     2     1     2     5     1     2     4     1
5 N+ T4 u" O1 D' }% P0 Q     5     2     3     3     5     2     1     2     3     1     2     3     6
6 W) E/ R* h7 @9 @     1     2     3     1     2     2     1     6     5     1     2     6     4- M9 ~( l& m4 ~- e, A
     5     2     3     4     4     2     1     2     3     1     2     5     6
3 d3 r# V$ V8 P( O% E     1     2     6     1     2     2     1     2     3     1     4     3     2, g7 z7 s6 Q- k1 \: I  j
     1     2     3     4     2     7     1     4     3     1     7     3     3
' S5 c9 p; ^% t     5     2     3     5     2     2     1     2     3     1     2     3     4
6 d8 A8 s8 e# `( X9 Y     5     2     4     1     2     2     5     2     3     7     1     6     2
6 C6 m1 Y" Y8 f' O& T
data2 =
     1     2     3     1     2     2     4     2     3     1     2     7     2
; K  j/ B0 R0 X: k. N+ b% P7 O     1     2     3     6     2     2     1     4     3     1     5     3     16 E( z5 |% q& n( `5 z1 P& A
     1     2     3     1     2     5     1     2     4     1     2     3     2
# A% r* W3 V/ O5 z  [     1     2     7     1     2     2     1     2     5     1     2     4     1
+ c1 Q  M; s+ }( I+ A     5     2     3     3     5     2     1     2     3     1     2     3     6- \% Z. J/ }* p- M
     1     2     3     1     2     2     1     6     5     1     2     6     4
: x0 D. f. H  `0 U' t% |     5     2     3     4     4     2     1     2     3     1     2     5     6
1 i3 |) Z  H8 ~2 C2 _     1     2     6     1     2     2     1     2     3     1     4     3     2
. c. x5 @5 x7 H* W. o. [* _     1     2     3     4     2     7     1     4     3     1     7     3     36 A9 u: u) B2 a% U
     5     2     3     5     2     2     1     2     3     1     2     3     4
2 `2 i+ o' ?: l5 `: Z' E     4     2     5     1     2     2     6     2     3     7     1     6     4
iteration 1, loglik = -327.100465
8 [/ j* h5 e3 E6 C) ]iteration 2, loglik = -238.259812  k: ~& _  R* B) ~' h: x. \
iteration 3, loglik = -232.962948
8 G. P# \9 X9 ]8 p/ q) F+ Kiteration 4, loglik = -223.3238913 q3 R4 w3 ~7 @! n* _, \4 b- r4 u
iteration 5, loglik = -207.630875% Q% n) A2 `* u& @
iteration 6, loglik = -191.012697
& P  P  b/ B4 N; {. ?7 Q  s/ xiteration 7, loglik = -178.611546) ^! Z: O! r+ e4 H
iteration 8, loglik = -171.524132
! v( H2 h5 D# Z; T/ Z0 m" o; qiteration 9, loglik = -168.6265260 C- r) O3 C$ n$ [. n; ^9 g* M
iteration 10, loglik = -167.387057
) @) k1 w5 y6 p+ W& citeration 11, loglik = -166.689175
LL =
  Columns 1 through 9
-327.1005 -238.2598 -232.9629 -223.3239 -207.6309 -191.0127 -178.6115 -171.5241 -168.6265
  Columns 10 through 11
-167.3871 -166.6892
0 F/ G- N2 e3 Q
prior2 =
    0.0000# P- T, I$ V6 o5 C+ D1 n9 F
    0.0000" N. Y" t; _4 B0 F$ J; d8 e* E% X
    1.00008 `: e) K* _# b, W. s+ j' S* Z
    0.0000. ~4 v# t3 p4 I# \, f
    0.0000
5 i3 T5 ]3 I7 k2 ?  V7 D
transmat2 =
    0.0138    0.0089    0.7680    0.1060    0.1033: j6 m4 z- _$ @
    0.7811    0.0000    0.0199    0.0067    0.1923
% D' n3 F8 \+ E3 p6 D    0.0000    0.9936    0.0000    0.0064    0.0000
+ }. r; n- z: B    0.1686    0.2604    0.2242    0.3398    0.00707 {' D0 z1 _, {- W# w4 R/ T; Q: T
    0.0053    0.0406    0.8350    0.1184    0.0007

6 M. f$ G' f9 n# sobsmat2 =
    0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.03515 E) I# S; N) P, j' Y% \
    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228" V8 L# S7 J; H7 G# i
    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00003 ^; ^) s' L. D' s, \
    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055: K/ _2 M, r+ |/ i# r7 E
    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
iteration 1, loglik = -277.738670
7 C  ?! N& Z; W# q9 witeration 2, loglik = -242.163247& t9 N. ^9 @8 _! v4 [
iteration 3, loglik = -238.321971; W4 U% I1 F2 \/ L" F' N
iteration 4, loglik = -233.166746$ E% J+ H1 C" _8 z; o
iteration 5, loglik = -225.682259
7 s6 J4 ?: l, ?' [, Xiteration 6, loglik = -214.560296# {7 ]; Z' J+ K/ ~+ s
iteration 7, loglik = -201.182015
; i; A* w! v0 o- niteration 8, loglik = -189.4274531 G4 z7 U% |- P- d: r
iteration 9, loglik = -179.156352' o' |) M+ _, ~' R, l) q
iteration 10, loglik = -171.744096; `% `8 S6 H' l4 k3 C( j
iteration 11, loglik = -168.409063
LL2 =
  Columns 1 through 9
-277.7387 -242.1632 -238.3220 -233.1667 -225.6823 -214.5603 -201.1820 -189.4275 -179.1564
  Columns 10 through 11
-171.7441 -168.4091
5 x7 B- U: U/ Q9 v
prior4 =
    0.0000
$ R9 i/ d5 b8 A2 b1 e1 T    0.9982
2 U1 P5 X3 b) y7 E1 S) u    0.0004
+ e! L( |6 Y( f. z" T: P# z    0.0014- f( v. O/ e$ b' z; {
    0.0000
$ G5 Y! t: _# K, ^! @; Q; M3 p
transmat4 =
    0.0873    0.5277    0.2799    0.1007    0.0045
3 O; O% Y; a) t    0.0002    0.0000    0.0005    0.0000    0.9994
" y2 g! U% J* H8 `' k    0.0180    0.0000    0.0118    0.0011    0.9692
0 o6 v9 w, }* [0 B! h6 K    0.0436    0.0226    0.0810    0.0219    0.8310. p: f+ r) R& Y/ }5 s- ~- T5 g6 ?* Y
    0.9746    0.0056    0.0003    0.0195    0.0000

' e8 ^7 A9 D1 |6 I7 k$ tobsmat4 =
    0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
& o- i2 j) x) J8 E/ e    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.00003 o2 ^2 x8 q, n- x
    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001" d  l% f3 J- g1 n) z/ A7 P6 L4 S8 G
    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
, X$ d0 Q5 p4 I! j/ l( w: {& ?    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
$ W3 V" j8 \" k0 q
data1 =
     5     2     4     1     2     2     5     2     3     7     1     6     2

; v0 x+ n& q0 J* K' A) h+ Sloglik =
  -19.2351
7 [( z* u! F: K" l3 l
loglik2 =
  -21.0715

# C, ~2 j' W! n8 N& `7 F, l3 b( ppath =
     3     2     5     3     2     1     3     2     1     5     3     2     1
9 M" s% w: g3 [' e$ |2 X7 j4 P
path2 =
     2     5     1     2     5     1     2     5     1     1     2     5     1

$ X; y9 _; n2 ?. a* H3 ifuhe =
     1
. [# i+ H. K) a: H$ S

9 [. D* S# b! ^5 ^# q% \. z, W$ {; u9 C7 \& _( T

HMM工具箱.rar

399.79 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 5 点体力  [记录]  [购买]






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5