数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-5-9 17:36
标题: 隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
7 G5 z$ W" u7 M1 L. P
隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱0 M9 |# g& M, m7 J  Q- W6 E
% ①定义一个HMM并训练这个HMM。+ [* P2 ~/ h: v, ^) X  i# G- H
% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
" b& z% @: h  G6 H6 f% 修改:旺齐齐% ^! z/ l& t4 O7 l
% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
, x# e7 J3 E$ d% _%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O:观察状态数- W, I$ t- p; a' I) A( S. U. [
O = 7;
9 s" g2 g$ y: \9 k! MO2 = 7;
" I7 R) l2 z8 m) s; V$ B1 A% Q:HMM状态数
5 }; R) C8 b7 z! e" A* ^Q = 5;
; u8 ^0 |% E) h0 JQ2 = 5;0 r3 I2 H6 a8 G/ i- N) U( M
%训练的数据集,每一行数据就是一组训练的观察值4 C" y7 \+ y1 i  I. y6 z) X3 o; u$ n$ K
data=[1,2,3,1,2,2,4,2,3,1,2,7,2;
+ Z9 e# n) R7 Z. l3 i2 i# _2 x      1,2,3,6,2,2,1,4,3,1,5,3,1;
2 ^5 }5 V9 g  `' \+ _0 f      1,2,3,1,2,5,1,2,4,1,2,3,2;9 y+ S. B; g, n( y. C/ o1 R- M& W! v
      1,2,7,1,2,2,1,2,5,1,2,4,1;! y8 j/ [- |- u/ r8 N
      5,2,3,3,5,2,1,2,3,1,2,3,6;
1 V7 K  j8 A3 F  d$ e" g, f      1,2,3,1,2,2,1,6,5,1,2,6,4;
3 i* `7 b8 ~6 Z+ t' i( ?; y      5,2,3,4,4,2,1,2,3,1,2,5,6;1 v. e  i% T' r9 ~. S. @  r( A- }! f
      1,2,6,1,2,2,1,2,3,1,4,3,2;/ x$ z; N* H! _% n" S
      1,2,3,4,2,7,1,4,3,1,7,3,3;
+ `! h. P5 {* Z) k& x' M      5,2,3,5,2,2,1,2,3,1,2,3,4;
) u* a7 o5 O  K      5,2,4,1,2,2,5,2,3,7,1,6,2;]

( W! k4 Z) l0 q  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;% J" J. d) c/ w5 f7 A) E
          1,2,3,6,2,2,1,4,3,1,5,3,1;
2 G5 U8 q9 C$ Z) ^! M9 W/ o          1,2,3,1,2,5,1,2,4,1,2,3,2;2 [' c9 b* ~+ X8 F
          1,2,7,1,2,2,1,2,5,1,2,4,1;
0 v9 _* u4 ~3 U% F9 o; N          5,2,3,3,5,2,1,2,3,1,2,3,6;
% y' A/ A  }% g+ w+ P* H/ c# k          1,2,3,1,2,2,1,6,5,1,2,6,4;
  c1 D# a9 E5 d" C. }          5,2,3,4,4,2,1,2,3,1,2,5,6;5 {* K% {) K7 F" }0 l3 `
          1,2,6,1,2,2,1,2,3,1,4,3,2;
* ^, |7 F/ A. L( u6 B( c. P* Y          1,2,3,4,2,7,1,4,3,1,7,3,3;
& }/ I/ U# u8 _  J" g! F          5,2,3,5,2,2,1,2,3,1,2,3,4;# |% R+ ]2 m& f: K* r2 i9 k1 y  q
          4,2,5,1,2,2,6,2,3,7,1,6,4;]
% initial guess of parameters" X- X+ f# Y# \' r1 l& g2 y
% 初始化参数8 M' Y. E- {7 r
prior1 = normalise(rand(Q,1));/ d5 i* P: b+ ?* {. a# R
transmat1 = mk_stochastic(rand(Q,Q));6 j& |+ i2 R/ O; a, k# ]
obsmat1 = mk_stochastic(rand(Q,O));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 z2 s7 M& t3 A$ |9 f7 g: L
% 添加部分4 N2 W- {. R# `( |0 e% l0 I5 O
    prior3 = normalise(rand(Q2,1));
% a7 J$ }, f. q: R    transmat3 = mk_stochastic(rand(Q2,Q2));% _2 [8 A8 u% G3 y7 h$ S/ G& D
    obsmat3 = mk_stochastic(rand(Q2,O2));
- ]$ Z' q! s$ M% j+ A) ?; ~8 M' c1 [5 E%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% improve guess of parameters using EM
0 Q0 w% h/ U8 R9 `& l, M1 E% 用data数据集训练参数矩阵形成新的HMM模型; U9 j9 v# u6 o6 `! b; Z
[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
1 S! v. }# w) r' w% 训练后那行观察值与HMM匹配度/ @, V- V  \# T  l7 d. m2 p( P
LL
* ]9 ?* t2 f# t& U+ R* G% 训练后的初始概率分布
/ I- T6 r4 i1 A+ G7 f; t' C! }" \prior2
' `2 \! |, k# ?& w3 H2 `" {% 训练后的状态转移概率矩阵
/ m- u" R4 X9 [2 x+ B1 ?3 Dtransmat2" ~. V* g# ^0 b( F7 r) L
% 观察值概率矩阵
4 [# O) W  s" I# Q$ Vobsmat2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
" f& B! f% o3 \6 \- U% 添加部分; {8 _/ b3 H7 i. w9 n) \
    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
" l' I! v5 a/ q4 v    LL22 h( G+ H1 t) U  U! [
    prior4$ ]. P; I1 U( d( i
    transmat4. i) @6 A/ |# ?
    obsmat4  K6 {7 z1 w* j
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% use model to compute log likelihood  u1 z7 Z( w0 L* C
% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]1 G8 w& F% y) q; o" @
data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]9 J3 M8 W/ l; ?
loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)8 D& j/ m, n. h: p0 N0 {
% log lik is slightly different than LL(end), since it is computed after the final M step4 q! n# a* y# R# B( w1 @2 a
% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
% path为viterbi算法的结果,即最大概率path
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%- L$ y, M) v3 c0 r" j, n
% 添加部分
& J" M1 R7 w3 ^1 s9 J7 P3 Ploglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
( U+ q1 ~, k, \( ?%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

! J& C1 e, F* Q! [+ b0 _# k) q: YB = multinomial_prob(data1,obsmat2);
( {0 e- Q- A8 w% o2 S5 Q" wpath = viterbi_path(prior2, transmat2, B)
0 z1 P2 L# k4 }; o+ qsave('sa.mat');

( s; |7 A# a" Z+ }4 k% t%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
: m% }5 I/ C+ Q& W# u2 f% 添加部分$ \* a9 @8 L; N% Z) ~* ?
    B2 = multinomial_prob(data1,obsmat4);
- L' B* l8 J( `% G    path2 = viterbi_path(prior4, transmat4, B2); u8 ~  s( A7 z1 q4 }
    save('sa2.mat');
7 \, }5 n2 C- e) v8 O3 u    if loglik2 > loglik   `4 g9 n, y7 u. m3 q
        fuhe = 25 V8 ~! ^1 ]; r) {0 ?+ G( W
    else2 x7 H! Z+ `. a/ p$ K3 t
        fuhe = 1
/ E" f* t8 g$ ~    end    9 _$ }& U) R4 P: g& {9 k0 ~
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
------
运行结果
------
data =
     1     2     3     1     2     2     4     2     3     1     2     7     2
9 A% M3 @1 M- v     1     2     3     6     2     2     1     4     3     1     5     3     1
# M8 V' g) F8 g1 I# r     1     2     3     1     2     5     1     2     4     1     2     3     2
( x6 H# }- K6 _. h     1     2     7     1     2     2     1     2     5     1     2     4     1
( m& x1 c2 u( n     5     2     3     3     5     2     1     2     3     1     2     3     6
' h7 ?. A& a( O0 x9 L  N     1     2     3     1     2     2     1     6     5     1     2     6     4/ Q. c" d! {. g, @! {" K6 M: e/ C+ E, ]
     5     2     3     4     4     2     1     2     3     1     2     5     6
4 P# u  O# }3 ^7 Y# F/ \* B     1     2     6     1     2     2     1     2     3     1     4     3     2
& ]4 a, z8 v% g8 @2 }     1     2     3     4     2     7     1     4     3     1     7     3     34 Z3 |. N! s( _2 J4 I! H
     5     2     3     5     2     2     1     2     3     1     2     3     4
0 {3 e& G: {, B6 t     5     2     4     1     2     2     5     2     3     7     1     6     2

1 w% l3 l* _# t$ w5 v% \2 E' H0 x; ddata2 =
     1     2     3     1     2     2     4     2     3     1     2     7     2' H4 d( P6 h: X7 R
     1     2     3     6     2     2     1     4     3     1     5     3     1
6 _: T" p- o1 d) y     1     2     3     1     2     5     1     2     4     1     2     3     2, r1 X, s/ o, Y1 C7 K. C
     1     2     7     1     2     2     1     2     5     1     2     4     1
7 g9 j* o* P5 B$ i. _* |/ F     5     2     3     3     5     2     1     2     3     1     2     3     6: {0 g; h3 g& ^1 x' p
     1     2     3     1     2     2     1     6     5     1     2     6     4
( Z* {: q& Z6 G" i$ K6 O, L. f3 V7 t     5     2     3     4     4     2     1     2     3     1     2     5     6
3 I6 N$ D/ l5 D: z     1     2     6     1     2     2     1     2     3     1     4     3     2
8 L3 P+ j* w. E# \     1     2     3     4     2     7     1     4     3     1     7     3     31 A" e; A2 i- l4 b* p: g9 V- E
     5     2     3     5     2     2     1     2     3     1     2     3     4$ J6 Q/ D4 B/ K5 ~" q
     4     2     5     1     2     2     6     2     3     7     1     6     4
iteration 1, loglik = -327.100465
! r# G  C; K; hiteration 2, loglik = -238.259812
$ B+ O1 }# s5 p- R; p& S; M- |iteration 3, loglik = -232.962948
1 n( m2 T) e. O- Hiteration 4, loglik = -223.323891
9 _. q: |) o7 T0 Riteration 5, loglik = -207.630875% J7 m& {" v7 z: H% Q
iteration 6, loglik = -191.012697# b7 O9 x# Z' Z/ E
iteration 7, loglik = -178.611546( C8 E1 e+ A$ I8 e& V$ U
iteration 8, loglik = -171.5241324 U0 p/ O/ l! ]3 f* z) c
iteration 9, loglik = -168.626526! K8 i: j* H7 }. y, R
iteration 10, loglik = -167.387057& L2 w/ i" |! C% \
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

  |7 w9 {2 w9 p9 m5 ^; Tprior2 =
    0.00002 l* r6 t, [+ p, G
    0.0000  T1 S6 }3 m" f; W& w/ x4 i
    1.0000
  H* L8 t8 `2 x: J9 _    0.0000
8 }0 N$ _( t4 h) H. M- O. Q    0.0000
2 O( p. i+ l* K0 M
transmat2 =
    0.0138    0.0089    0.7680    0.1060    0.10332 L; a3 N6 X+ i6 l
    0.7811    0.0000    0.0199    0.0067    0.1923; W+ t7 u" s7 f% F4 R! V
    0.0000    0.9936    0.0000    0.0064    0.0000
) h. j9 g, r) y. z$ ]/ F! d    0.1686    0.2604    0.2242    0.3398    0.0070
; C4 Q+ h- N$ P/ i' r6 e* G! Z    0.0053    0.0406    0.8350    0.1184    0.0007
3 r0 F' L4 r3 l5 y
obsmat2 =
    0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.03510 s" W1 _1 m3 F+ H! u1 \3 Q
    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
) D# c0 I! D% B( M" t  Z9 ~    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
. T3 H8 l7 U# F# n    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
0 h1 S! ]2 f$ a9 C6 ~* y* D  w. \    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
iteration 1, loglik = -277.738670
( m0 {2 d/ l  N8 ^9 S( Eiteration 2, loglik = -242.163247. m9 k$ G/ S! O8 Z
iteration 3, loglik = -238.321971
" M& I. @( D. Q: \0 Z0 iiteration 4, loglik = -233.166746. E6 x: C; \- ~' \
iteration 5, loglik = -225.682259
: }' J5 O% O8 H$ j1 o8 G: ~* u& Biteration 6, loglik = -214.5602969 H* a% V. b7 ?* q" z0 A
iteration 7, loglik = -201.182015
) K6 J6 T+ u" u  g; i( ziteration 8, loglik = -189.427453
2 K) e7 L4 t( H) titeration 9, loglik = -179.156352
/ N1 S1 S! Q0 v5 x* H3 |iteration 10, loglik = -171.744096" j& `# g* j$ q: ]  _! W( K
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

9 ]2 |/ ?, Z5 A2 O, T# u3 rprior4 =
    0.0000! K; M# i  l/ N+ o3 j( Z% T$ D
    0.9982$ C& q5 e2 W! X. Y6 H
    0.0004; n5 t$ {  W) `, }* L
    0.00142 `- ~6 ]7 C9 P5 H% B! i
    0.0000

0 u% x0 }3 o" ]% e" y# H) ^transmat4 =
    0.0873    0.5277    0.2799    0.1007    0.00456 i4 m, O) ?* i
    0.0002    0.0000    0.0005    0.0000    0.9994
) _+ k4 G' N7 T" s    0.0180    0.0000    0.0118    0.0011    0.9692
6 n9 |0 S& T7 {, T7 \    0.0436    0.0226    0.0810    0.0219    0.8310: K1 @* s- U1 D6 O1 Q
    0.9746    0.0056    0.0003    0.0195    0.0000

+ [0 y( X) L) i6 Zobsmat4 =
    0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.07708 {* ~: d8 U8 @% |  @% i# t( e
    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
7 c. b# i% o9 F( i% }) ]    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001" R4 J' w: l, x
    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802; o* s& O# D% {2 p8 b
    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
: a& V5 {8 Z# {: M
data1 =
     5     2     4     1     2     2     5     2     3     7     1     6     2
, X8 F8 R1 Q! X7 v/ k# |% v- Q# D
loglik =
  -19.2351
' k* w9 {. Q, W0 u4 c
loglik2 =
  -21.0715

# v) q: r9 B4 Z! X2 H+ \path =
     3     2     5     3     2     1     3     2     1     5     3     2     1

+ Q& S* ^3 w8 {4 f* H$ Y& apath2 =
     2     5     1     2     5     1     2     5     1     1     2     5     1
' p+ l4 c- U' e  Z% E- ?  t9 w
fuhe =
     1

# I) S5 u0 a) s7 k: s5 E& q2 `
  q1 p1 H2 {4 b" C5 C$ K: _% i8 q4 d9 M- D' y

HMM工具箱.rar

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

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






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