数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-5-9 17:36
标题: 隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
/ t7 D& y; C/ q  K
隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
( l( b* v" h9 A
% ①定义一个HMM并训练这个HMM。/ j, |/ @7 q( I4 v& l
% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
/ K/ ^% l5 j. N5 l* F/ z6 q% 修改:旺齐齐
+ W' E9 G* j/ o/ p" m% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。/ @) x& l0 M3 B& N, A
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O:观察状态数- p; l5 b8 b2 p2 C9 ~% N, ~. `- ]0 d
O = 7;, P1 ?( Z3 i- f+ a  R% F/ L) u  ?, I6 U
O2 = 7;% @% D$ [- w# y0 J2 c
% Q:HMM状态数
% C; @" Z3 I  C" EQ = 5;
; m' h! H7 i- V# u6 n0 Y- |- d, MQ2 = 5;. Y9 j0 v* X+ I: j
%训练的数据集,每一行数据就是一组训练的观察值
, {2 [" @- H2 o% I, ydata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
- Z  ^( J1 C- b  w8 ]5 O; }      1,2,3,6,2,2,1,4,3,1,5,3,1;
; I' N5 f1 w7 n$ D9 Z" N/ h      1,2,3,1,2,5,1,2,4,1,2,3,2;, ~9 Q# Z* s# `. V2 Z, R
      1,2,7,1,2,2,1,2,5,1,2,4,1;
1 L7 {; X  L4 }: f1 R: ~& @% L( z      5,2,3,3,5,2,1,2,3,1,2,3,6;3 [( l+ h6 A0 ~% y8 @/ W/ A
      1,2,3,1,2,2,1,6,5,1,2,6,4;# ?) o5 j* L, g, r; u+ f( k
      5,2,3,4,4,2,1,2,3,1,2,5,6;
" e" D& N4 B% J) B$ E, {. e( V      1,2,6,1,2,2,1,2,3,1,4,3,2;) p& e/ t3 P4 y6 c% I, w% R" X/ V0 n
      1,2,3,4,2,7,1,4,3,1,7,3,3;
% i# ?$ [1 O7 x) ^- L- U3 h) u      5,2,3,5,2,2,1,2,3,1,2,3,4;) N3 N! B8 E. B# ~0 g  s: X. s
      5,2,4,1,2,2,5,2,3,7,1,6,2;]
+ W+ a# R; p$ q' J- {7 A* |
  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;. G+ c/ y# I/ t: H1 b
          1,2,3,6,2,2,1,4,3,1,5,3,1;/ K: f6 F) N, M/ J" n
          1,2,3,1,2,5,1,2,4,1,2,3,2;
! z# w4 L) E# f% O          1,2,7,1,2,2,1,2,5,1,2,4,1;
3 g* L9 s7 N- a! S( ~          5,2,3,3,5,2,1,2,3,1,2,3,6;
4 s( X( B: ^  ^4 S7 x9 j0 M9 q          1,2,3,1,2,2,1,6,5,1,2,6,4;
  J0 K2 o* r  z- p& j. v# s          5,2,3,4,4,2,1,2,3,1,2,5,6;
* V2 M4 D- h# V8 `6 N          1,2,6,1,2,2,1,2,3,1,4,3,2;! F6 D7 A+ L, O! [" D  Y
          1,2,3,4,2,7,1,4,3,1,7,3,3;
8 W' ^2 O5 f: n" b0 [' f: b) N9 m          5,2,3,5,2,2,1,2,3,1,2,3,4;
2 u7 A- u4 X8 v- R. ?3 }8 @2 b          4,2,5,1,2,2,6,2,3,7,1,6,4;]
% initial guess of parameters
. Q! J6 o/ u& g# x# V+ x0 u# n% 初始化参数# f  i9 ~7 p( {0 }
prior1 = normalise(rand(Q,1));
1 J' q- o" C  |/ ftransmat1 = mk_stochastic(rand(Q,Q));$ \* p5 p* o, v( a
obsmat1 = mk_stochastic(rand(Q,O));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
* O1 }6 S3 h9 W" u  Y# G3 ?% 添加部分" E% D4 z4 S# o' a3 `# K( u% T
    prior3 = normalise(rand(Q2,1));7 z% {5 K3 K5 D' Y. D) P
    transmat3 = mk_stochastic(rand(Q2,Q2));5 Y! t  x3 i; D- \0 Z; v& E  o
    obsmat3 = mk_stochastic(rand(Q2,O2));
- F8 h' c2 e+ k2 V/ z%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% improve guess of parameters using EM7 X; X# a3 r+ `' q. r& @, i6 H
% 用data数据集训练参数矩阵形成新的HMM模型$ L, ?7 \7 D, D0 L1 ^  q$ G. i
[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
: w4 n$ r7 R3 G4 T) A8 |: I5 |1 C% 训练后那行观察值与HMM匹配度
9 r7 T+ V/ ^. X1 ]LL
, V  U; v! @9 R, f% 训练后的初始概率分布: ?1 G& I' j5 x2 r+ [
prior2: x1 g3 Q: l+ z0 }; W' b
% 训练后的状态转移概率矩阵5 k8 _; m" J5 w8 o7 C3 K
transmat2" O" h# d9 g/ |
% 观察值概率矩阵
: H" I8 v& N: V& N# @' u( R! C' ?obsmat2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%! b) Z' L/ X* b
% 添加部分3 t; T4 K2 s9 x+ s
    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));) n! r/ r) z0 n! x
    LL2
6 a' b0 E. r! k! G; ?- P* t    prior4
/ {: T. p7 x* I% h& i2 H- K" j: H    transmat4
; a1 t1 \" w  u% y7 H    obsmat4
) o# u  C$ a3 y* \( {7 t%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% use model to compute log likelihood
3 I3 ]  u5 u9 G: z7 E' T% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
5 j  S7 V3 M& p3 d1 {2 l) Pdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]5 y! ^& m/ ]/ y- w% y) h
loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)8 ~$ Z0 z; E4 H3 y+ }' p2 X
% log lik is slightly different than LL(end), since it is computed after the final M step5 w' j  Y6 ?- o( Q0 b
% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
% path为viterbi算法的结果,即最大概率path
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0 R% u' V  ]* Z$ \  x9 v5 A& M- ^# x% 添加部分
9 k' @! m; d( g+ Z' F/ i! lloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
$ H8 W7 l2 i- l! P4 v2 m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
* ?% }) o8 H, }# U
B = multinomial_prob(data1,obsmat2);
) y# ?6 V( F: g9 n% t) _# Opath = viterbi_path(prior2, transmat2, B)( r$ ]& w6 E% e7 l' v
save('sa.mat');

, b; T  Z9 w$ Z  h8 e; Y: U0 e: D%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' B$ X. Q1 h7 w  r' {  x# C
% 添加部分
4 K# O- i% B3 K# Y, v    B2 = multinomial_prob(data1,obsmat4);
* ~2 l# j7 \, f. o4 U, I" o# J    path2 = viterbi_path(prior4, transmat4, B2)3 P+ z% v  x. @" P- O+ E/ W, u! w
    save('sa2.mat');+ Y' m/ s% \1 j
    if loglik2 > loglik
, ?6 e  f4 s8 ~# r: h        fuhe = 2
. I3 w4 t" i8 |    else' K6 {, D0 U- v2 e
        fuhe = 1
2 K* C1 [- G  A: r. z% _    end    ; F6 B" V  X. a( _1 P0 Q
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
------
运行结果
------
data =
     1     2     3     1     2     2     4     2     3     1     2     7     2
4 k3 v0 c1 Z; s" n: N     1     2     3     6     2     2     1     4     3     1     5     3     1# z% g. [* T- B4 k# W# |, n
     1     2     3     1     2     5     1     2     4     1     2     3     2& K' ^- @+ }) p
     1     2     7     1     2     2     1     2     5     1     2     4     1
0 ?, G$ q! p- O     5     2     3     3     5     2     1     2     3     1     2     3     60 H# h/ }& n  y6 @: J
     1     2     3     1     2     2     1     6     5     1     2     6     4
' e7 r) l: Z8 _, R     5     2     3     4     4     2     1     2     3     1     2     5     6
& Y/ w- c6 y" U& W. ?: d1 S     1     2     6     1     2     2     1     2     3     1     4     3     2
, X3 ^. b0 |& Q! b     1     2     3     4     2     7     1     4     3     1     7     3     3/ \- z* ]7 q  b" H6 |) M
     5     2     3     5     2     2     1     2     3     1     2     3     4
6 y3 D& U# m1 g2 u5 u* c: T4 J9 U  Q     5     2     4     1     2     2     5     2     3     7     1     6     2
% F& C- C- z+ r# T4 i& A0 w
data2 =
     1     2     3     1     2     2     4     2     3     1     2     7     23 Q  i& }; r& q8 [0 `' `. V- m
     1     2     3     6     2     2     1     4     3     1     5     3     19 t1 H+ ]6 C& D( N& O3 K
     1     2     3     1     2     5     1     2     4     1     2     3     2
7 D5 ?& v, r9 N$ G     1     2     7     1     2     2     1     2     5     1     2     4     1% l5 z' R# i* y4 L# |0 k
     5     2     3     3     5     2     1     2     3     1     2     3     6
3 `# u: s* Z, c0 j& B     1     2     3     1     2     2     1     6     5     1     2     6     4$ S1 \, g- a: E+ q
     5     2     3     4     4     2     1     2     3     1     2     5     6
. K, u7 G0 y! B0 p     1     2     6     1     2     2     1     2     3     1     4     3     2
. M3 E: G. ]  D     1     2     3     4     2     7     1     4     3     1     7     3     3" i; V" J5 v9 S6 d
     5     2     3     5     2     2     1     2     3     1     2     3     4$ a- V4 E# ~8 R8 _% W1 U, i
     4     2     5     1     2     2     6     2     3     7     1     6     4
iteration 1, loglik = -327.100465: X$ c* e. f) w6 i- h
iteration 2, loglik = -238.259812* D5 ~8 B1 h* ~* Z" c( L6 e
iteration 3, loglik = -232.962948# Y  U- \  q6 z
iteration 4, loglik = -223.323891% A# w. j" D& \0 w# W7 Q
iteration 5, loglik = -207.630875
* |! M& J9 N) B6 `9 {( Kiteration 6, loglik = -191.012697/ V$ S0 S& {* n  f) h1 e
iteration 7, loglik = -178.611546
) K7 o1 j: ]+ _1 J3 E0 qiteration 8, loglik = -171.524132
6 c% ]  v; y" W5 u0 q/ B: ^$ \iteration 9, loglik = -168.626526
8 t5 X; O& ^) }iteration 10, loglik = -167.387057$ p3 x9 [- J" ^* Q# t
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
/ b9 r& [" H1 M- M( k. G' G
prior2 =
    0.0000
9 y" J7 _( j: E$ @4 v    0.0000
7 C' O; O8 G% b& ]9 C    1.0000
! a: w4 ]0 C/ k6 C+ f    0.00003 f/ F4 r* B! w
    0.0000

  a( N8 `- t6 Otransmat2 =
    0.0138    0.0089    0.7680    0.1060    0.1033" V6 |& D6 \% |4 b( p! g9 x
    0.7811    0.0000    0.0199    0.0067    0.1923
6 D: ^8 U9 `$ w2 R; D. t6 Q. J7 C    0.0000    0.9936    0.0000    0.0064    0.0000
$ }4 ]. R4 O8 Z- w+ ^7 h    0.1686    0.2604    0.2242    0.3398    0.0070
6 L; u8 Q* E: V0 z7 s( k6 l$ u1 C    0.0053    0.0406    0.8350    0.1184    0.0007
: `/ u% E+ x8 `# l/ U+ ^
obsmat2 =
    0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
0 q) C3 L1 L9 d8 N. i6 p3 B    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.02283 {6 k! z. L8 D& p5 g
    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
' u3 D& }  l) l    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
7 q8 H- `* g: E, a& z) O; y1 O) O    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
iteration 1, loglik = -277.738670
+ o4 e- K# R3 y: biteration 2, loglik = -242.163247
$ k: F+ @1 d. h* d8 ?iteration 3, loglik = -238.321971
+ \+ J# S* M- \) Viteration 4, loglik = -233.166746
; a9 F) s) N8 R! V- W1 h8 `iteration 5, loglik = -225.6822590 H$ k0 J  s4 ~  O8 X. {
iteration 6, loglik = -214.560296. V" Q. L2 ]4 P( v' i, `; [* k
iteration 7, loglik = -201.1820155 i& o6 v7 U. O9 a* j- i* a
iteration 8, loglik = -189.427453
: }9 L% ?: ]) u& ?iteration 9, loglik = -179.156352' ?2 S3 B2 U6 N9 M
iteration 10, loglik = -171.7440967 ^' f5 t" ?) R9 H& g
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

3 {' W  L2 V: b, p* @& lprior4 =
    0.0000
& a; B' q' s& ~! I    0.9982
+ u) f" H# \' c, @0 M# ~9 r3 S* S2 Y    0.00048 _" m2 Y5 p. y, ?- e3 o6 g
    0.0014
' a: i- d! v% O    0.0000

$ {8 n1 H. Z" g6 ~1 Q" J  A4 utransmat4 =
    0.0873    0.5277    0.2799    0.1007    0.0045
, A' {& G, V% B' S( ~% @2 W    0.0002    0.0000    0.0005    0.0000    0.99949 Q6 |: B" c, f  u
    0.0180    0.0000    0.0118    0.0011    0.9692
& ~( @7 e2 o( Q! x7 h6 ]" d8 ?    0.0436    0.0226    0.0810    0.0219    0.8310
& e* Q; U* ]: q8 N, a    0.9746    0.0056    0.0003    0.0195    0.0000

2 G8 A4 ?; ~( O6 Bobsmat4 =
    0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
2 |# {! J8 b# {. m! |9 {3 e% l8 s  D    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
0 [( v, _* V9 R2 L    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
  s1 K- p; f; ~    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
/ y& R! n7 q& c  |6 b9 V: s    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
4 j( g, t' g# |) W4 M
data1 =
     5     2     4     1     2     2     5     2     3     7     1     6     2

. e% N: z; e, _3 ~loglik =
  -19.2351

/ y( X# r, s) X5 g/ nloglik2 =
  -21.0715

) o9 ?6 f/ r' y7 Ipath =
     3     2     5     3     2     1     3     2     1     5     3     2     1
4 y/ M% W: u7 h" t4 H8 W& y
path2 =
     2     5     1     2     5     1     2     5     1     1     2     5     1

/ y; f' E9 d- j# ^fuhe =
     1
9 v' f1 P' p; R4 B5 }6 c  _5 M
, H" E, C! n# _- V
# r( S' ^- v, c  ^1 f: \

HMM工具箱.rar

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

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






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