数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-5-9 17:36
标题: 隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
  ]; H4 r: o* I. @$ ?
隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
$ x2 m- U) r+ C9 _  C
% ①定义一个HMM并训练这个HMM。4 y' T* ^1 k, \& T" l% s$ G
% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。3 {( @, }# d+ `
% 修改:旺齐齐
: k7 z" J' L% D- ~% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
+ S3 q5 g7 N: r* y# a# [%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O:观察状态数6 z2 n$ D! l3 N8 h& u! w  }* {
O = 7;" ^1 N* o% p$ x1 M8 n- g0 d7 X
O2 = 7;# f) s' O" w. G1 l4 |0 `3 Y: s1 f6 H
% Q:HMM状态数3 k( [" R% O9 j1 }6 q
Q = 5;
# F( K/ b, P: ~  @' r$ fQ2 = 5;
* j: g7 k" U- ^, w+ Q9 i/ A/ g%训练的数据集,每一行数据就是一组训练的观察值8 o& ^$ s, g; z) t
data=[1,2,3,1,2,2,4,2,3,1,2,7,2;5 X9 k% D5 Z* q- M
      1,2,3,6,2,2,1,4,3,1,5,3,1;" g1 f' k$ b* r+ ^) [' a* l
      1,2,3,1,2,5,1,2,4,1,2,3,2;& E1 a; J+ t: J7 M
      1,2,7,1,2,2,1,2,5,1,2,4,1;
9 r1 Y. X2 R7 h  w. d/ E% A      5,2,3,3,5,2,1,2,3,1,2,3,6;  b( u" R6 g* p% b  m& P
      1,2,3,1,2,2,1,6,5,1,2,6,4;6 b) ?# ~5 g" ~+ M
      5,2,3,4,4,2,1,2,3,1,2,5,6;5 U5 s( H/ h7 |% }7 {. b
      1,2,6,1,2,2,1,2,3,1,4,3,2;
6 J  s6 X0 s- ]# \) S      1,2,3,4,2,7,1,4,3,1,7,3,3;: A1 z4 l7 ?& ]6 E! r8 k' d
      5,2,3,5,2,2,1,2,3,1,2,3,4;
2 H# `& }) }" i  x+ B  b      5,2,4,1,2,2,5,2,3,7,1,6,2;]

  \2 P* r4 R2 G, V7 w" T  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;' o. h% O1 y* ^7 m- q% F3 j
          1,2,3,6,2,2,1,4,3,1,5,3,1;) u) U  |6 D9 `0 F# N  c+ f- y
          1,2,3,1,2,5,1,2,4,1,2,3,2;
* o- g" v, e/ f5 N! x$ v0 q          1,2,7,1,2,2,1,2,5,1,2,4,1;
$ x& u% M, b4 `# d( w          5,2,3,3,5,2,1,2,3,1,2,3,6;
" y; @: r3 Y9 o  }9 d          1,2,3,1,2,2,1,6,5,1,2,6,4;* H$ I" ~% a, f  u& l
          5,2,3,4,4,2,1,2,3,1,2,5,6;1 \" d) a  T9 u% U! C3 p1 Z
          1,2,6,1,2,2,1,2,3,1,4,3,2;/ }' G3 v$ k3 P
          1,2,3,4,2,7,1,4,3,1,7,3,3;
8 h4 G6 g2 I; H$ p' v          5,2,3,5,2,2,1,2,3,1,2,3,4;8 ?2 G- f. s4 Z: u' u5 B# |' i+ e
          4,2,5,1,2,2,6,2,3,7,1,6,4;]
% initial guess of parameters! N! W6 v& `: X
% 初始化参数' L+ }+ Z) j$ A( I
prior1 = normalise(rand(Q,1));, i; {: D; c/ h/ _4 M8 F
transmat1 = mk_stochastic(rand(Q,Q));1 z  R# L7 {  O( p6 s# Y3 Z/ l
obsmat1 = mk_stochastic(rand(Q,O));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
. O( l: ~& m/ b( r% 添加部分
- r# R' u1 V1 ]. f    prior3 = normalise(rand(Q2,1));
  q" {& h* L  P9 c1 t    transmat3 = mk_stochastic(rand(Q2,Q2));
: Y- ?2 {4 T: O( _# n3 R    obsmat3 = mk_stochastic(rand(Q2,O2));' }/ `2 P  b" G4 C$ C& z# [
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% improve guess of parameters using EM
  N6 q1 D; N" }% 用data数据集训练参数矩阵形成新的HMM模型6 `; R4 U# ]/ ]0 R( ]
[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));. C7 g8 P& ?" d" y5 L! H  L* P. Z% c
% 训练后那行观察值与HMM匹配度& y8 W' d" V; s6 U% f8 s
LL5 `3 o0 ~! g9 O7 {; a
% 训练后的初始概率分布
3 B3 G  W3 @* `0 _prior2% t# A5 Q4 p1 [* r9 H5 J1 r
% 训练后的状态转移概率矩阵/ R4 P: V& a& O0 o
transmat2
8 R/ e6 n" |* x0 @% 观察值概率矩阵- n1 P# K, y! U- Y
obsmat2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4 X% u6 N  x! b& F
% 添加部分
8 N0 E0 W# O$ p: [& ?! h- t; u4 d    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
0 F: m3 V7 a2 [- B& M* r1 D; F    LL2' t1 f; N* z: d6 z8 K
    prior4
) d& A6 G5 `; v' I" ~9 Z    transmat49 A" i* y! _$ K' f8 ~
    obsmat4
* W- R+ c/ j+ G%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% use model to compute log likelihood
9 p5 Z, z* V: P& g% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
! m4 J* s2 u6 _+ ndata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
) ?7 `; b& k6 Y$ c9 h; cloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
, _& c: W4 A! @' r9 {: I/ t- d% log lik is slightly different than LL(end), since it is computed after the final M step
5 I  y( N5 x. ?4 l* {8 F6 A% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
% path为viterbi算法的结果,即最大概率path
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%9 E, S) Q7 L) O
% 添加部分
- j8 e' R2 \4 h! x: M+ N  hloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
: _4 y, Z6 i5 F. E0 \' Z3 m  h%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 }! E1 L& L' M" ^1 L- t
B = multinomial_prob(data1,obsmat2);
" d: d& |/ [4 q5 h, `path = viterbi_path(prior2, transmat2, B)
( P- Y: r5 T) {0 }3 ysave('sa.mat');

' H$ {( Y" n2 ?% q, M4 h& I1 O5 O%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% b) E6 h/ ^, R. C
% 添加部分
0 G: p. n8 ^8 t# b4 J9 f    B2 = multinomial_prob(data1,obsmat4);- ?) F: Y% j+ N" X
    path2 = viterbi_path(prior4, transmat4, B2)( v; G+ n+ r; j: P
    save('sa2.mat');
" j7 J: p& {) H) F  {4 ~# {    if loglik2 > loglik
9 d4 t% g# f- L) Y' C        fuhe = 27 R6 t( ]3 \& j  d  s3 E
    else2 W: V# I6 Y$ D1 h0 Y! ~8 ]- u
        fuhe = 14 T; R* T9 F& L6 S* `1 X
    end    / I. V) P( c! p% x
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
------
运行结果
------
data =
     1     2     3     1     2     2     4     2     3     1     2     7     2
. I7 d  T7 _" x, U) o; w     1     2     3     6     2     2     1     4     3     1     5     3     1
! k1 v; m' [1 h; |- G     1     2     3     1     2     5     1     2     4     1     2     3     2
0 q( ?! g8 ]7 f1 ^* Z  E% e3 K$ E     1     2     7     1     2     2     1     2     5     1     2     4     13 @9 b( j  H: J9 L( A* A
     5     2     3     3     5     2     1     2     3     1     2     3     6
& p( v, Z( L/ _3 S. ]( [1 L6 M% b     1     2     3     1     2     2     1     6     5     1     2     6     44 q* G' z( e5 N- j4 ?
     5     2     3     4     4     2     1     2     3     1     2     5     6/ k  ]3 t# y# p; K  d& w
     1     2     6     1     2     2     1     2     3     1     4     3     29 J  l' G) h2 y
     1     2     3     4     2     7     1     4     3     1     7     3     3# q# }4 f2 M$ k5 u5 u6 g
     5     2     3     5     2     2     1     2     3     1     2     3     4+ E: Y0 j) x3 x# m' B  `
     5     2     4     1     2     2     5     2     3     7     1     6     2

' b5 x9 n  h! d: o# r, {data2 =
     1     2     3     1     2     2     4     2     3     1     2     7     22 V5 |# V/ h% }: ^) G
     1     2     3     6     2     2     1     4     3     1     5     3     1
8 G, l  P. i. f! i6 }1 |8 Q" E6 }: U     1     2     3     1     2     5     1     2     4     1     2     3     2
! ~2 F& N! Y6 j5 L0 F     1     2     7     1     2     2     1     2     5     1     2     4     1( L/ }) D' s- v# c; _9 F+ S4 Q
     5     2     3     3     5     2     1     2     3     1     2     3     62 j, T" ?/ B! K
     1     2     3     1     2     2     1     6     5     1     2     6     4% ?) N- \6 I: T. o/ Z
     5     2     3     4     4     2     1     2     3     1     2     5     6$ V% {# z8 P; B: t& S* K% \- T! ^7 u
     1     2     6     1     2     2     1     2     3     1     4     3     2/ E: m, I" y; x8 G* s$ g$ z  Y
     1     2     3     4     2     7     1     4     3     1     7     3     3
8 @# Z8 f- T2 Q/ n) ~     5     2     3     5     2     2     1     2     3     1     2     3     44 C' g2 l' M6 r9 W8 V* z- M
     4     2     5     1     2     2     6     2     3     7     1     6     4
iteration 1, loglik = -327.100465) N6 e0 \" |( S* J
iteration 2, loglik = -238.259812
' p5 _* Z% M- d2 J3 \" Ziteration 3, loglik = -232.962948
/ F: C9 |5 s: T6 {; _1 citeration 4, loglik = -223.323891
+ t* O, M! |. p$ p2 F% g) Ziteration 5, loglik = -207.6308756 D8 ?, z! e& c  v; `
iteration 6, loglik = -191.012697* A0 @. ]) G' U
iteration 7, loglik = -178.611546
+ {; Z& f/ t" ^0 a: S3 [iteration 8, loglik = -171.524132) O2 l% s9 M5 |  `' @* l# V
iteration 9, loglik = -168.626526
- c/ L' _# n+ _% V" R0 Literation 10, loglik = -167.387057$ f3 H& g6 {9 X- }: s0 S. E6 d
iteration 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
4 a* Q2 {7 V# D$ K
prior2 =
    0.0000
0 G1 f4 O6 |  v3 l1 N- S  t, H    0.0000
) I2 u! s$ t( l$ N* z4 u3 W    1.0000: T+ j2 x+ y; c! n
    0.0000, j/ {. X) r) {, F
    0.0000
, f5 p% D. E" F
transmat2 =
    0.0138    0.0089    0.7680    0.1060    0.1033
1 n0 E* @4 g5 y* T( B    0.7811    0.0000    0.0199    0.0067    0.1923
& g) Y/ t- N- X8 u6 g. z    0.0000    0.9936    0.0000    0.0064    0.0000
% j, ~- k9 l" R4 K: d: ]9 M1 |    0.1686    0.2604    0.2242    0.3398    0.0070
9 T3 R( G8 W9 P; h" K    0.0053    0.0406    0.8350    0.1184    0.0007

' h  b! y5 {0 v0 M4 k9 Zobsmat2 =
    0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351- L4 s5 ]) B& I6 E# X& V! w7 |
    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228" h: T2 A( i9 z. i1 Q; C
    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
/ [# e) Z0 x  G7 W    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
) _$ Z! y: ~  m7 o1 H    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
iteration 1, loglik = -277.738670* K9 S( k6 \# `; O
iteration 2, loglik = -242.163247
5 f$ y: u; b9 @* K$ viteration 3, loglik = -238.321971
2 Q3 b! }$ K6 m( b% o/ ]5 |iteration 4, loglik = -233.1667464 @; Y- _2 w/ l# i8 Q0 @* o
iteration 5, loglik = -225.682259
8 |+ i: ^' h0 c' x! Y8 _& E0 Siteration 6, loglik = -214.560296
+ j6 x; a6 w+ B" R. [- i5 giteration 7, loglik = -201.182015
( i0 M$ D4 F* Q5 a$ Piteration 8, loglik = -189.427453& e6 }5 U! ]2 G2 i2 i+ m) y5 e  p" [8 u
iteration 9, loglik = -179.1563520 [0 a6 @$ {$ j% [7 N
iteration 10, loglik = -171.7440960 ]$ |. l; A/ }) K" c% e
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
1 v& m# X6 Y) j1 O
prior4 =
    0.0000
$ D; Y. E- H% {% t. Q$ u% l! E    0.9982
. g1 J: \9 p+ j- m* }: B: P( R    0.0004
; x4 T& u9 I  A$ @" H1 C& H    0.00146 Y* U2 v( v3 f. l8 k
    0.0000

  u: I3 H( F+ a  x/ ~0 S3 k" r$ Vtransmat4 =
    0.0873    0.5277    0.2799    0.1007    0.0045
2 |; G) T1 `; L% t) B    0.0002    0.0000    0.0005    0.0000    0.99945 i. y) A% l; [: D8 Z5 Z0 z
    0.0180    0.0000    0.0118    0.0011    0.9692+ e8 a2 r# p2 Q) q: Z* [. Z: c# b
    0.0436    0.0226    0.0810    0.0219    0.8310
" V* U1 q6 X4 q/ }8 J: f+ Z+ x1 V    0.9746    0.0056    0.0003    0.0195    0.0000
! T2 w+ A$ ?* g
obsmat4 =
    0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
- u6 }3 n! z; q' M  R    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.00006 b* F6 R( t4 A% x
    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
' j# i$ Q0 B) i0 h    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802( z0 W6 c; w! t0 c: e" i2 |
    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
1 r; o, `7 y9 P* u% B2 f
data1 =
     5     2     4     1     2     2     5     2     3     7     1     6     2

: r' I' j  Z( R1 Hloglik =
  -19.2351
' h, e3 P& F) O% A5 H- D# X
loglik2 =
  -21.0715
# ~, y4 J! T$ j- H
path =
     3     2     5     3     2     1     3     2     1     5     3     2     1
! ~0 p- y# j6 c, [
path2 =
     2     5     1     2     5     1     2     5     1     1     2     5     1
9 s1 V: v+ g9 d, m. V4 i- }0 J
fuhe =
     1

8 {7 B9 a2 ^# r! h0 W. T5 ~# E9 b4 l9 m2 d6 i' W* L
* d: A1 _4 o$ K. D5 Y

HMM工具箱.rar

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

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






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