数学建模社区-数学中国

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

作者: 杨利霞    时间: 2020-5-9 17:36
标题: 隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
9 A! s) ~" l" Z
隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
" [- V8 M+ M# t5 z& w
% ①定义一个HMM并训练这个HMM。$ y8 p. b. h8 m) Q& V" y
% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
' T/ J% d( P  P% 修改:旺齐齐3 M4 K$ W- \4 T* Q
% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
, p# x  v+ t( n- T9 w0 j%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O:观察状态数
3 V2 `8 I; ^  @9 Q) a4 EO = 7;
1 S( G/ n- ?2 u, ]7 G# EO2 = 7;, ^" q1 o, y5 o' }2 c( K5 S: Y
% Q:HMM状态数& a" E1 P4 h& n. A3 b- [# h1 q2 O
Q = 5;# V2 \1 P# ~) h! B" @
Q2 = 5;
  F& ^; d% ^7 f2 P6 c3 P%训练的数据集,每一行数据就是一组训练的观察值
- h0 Z( o6 C+ L6 m: c; d% O9 Ldata=[1,2,3,1,2,2,4,2,3,1,2,7,2;  z. F- [, \3 _2 ]9 [
      1,2,3,6,2,2,1,4,3,1,5,3,1;
1 O# V0 i/ T' M0 o! J      1,2,3,1,2,5,1,2,4,1,2,3,2;
) U3 e! V9 u0 D6 h, V# Z$ T      1,2,7,1,2,2,1,2,5,1,2,4,1;
1 U* b6 K' [' C6 Y; C      5,2,3,3,5,2,1,2,3,1,2,3,6;
" A9 g) L0 g( E: n      1,2,3,1,2,2,1,6,5,1,2,6,4;
( \. a  e% ~9 \5 G; j4 O- ?      5,2,3,4,4,2,1,2,3,1,2,5,6;
2 I- _6 g& @& `      1,2,6,1,2,2,1,2,3,1,4,3,2;  I* y* ]- r3 v7 I
      1,2,3,4,2,7,1,4,3,1,7,3,3;
6 U* G9 N) Z% I" f; y2 J( M      5,2,3,5,2,2,1,2,3,1,2,3,4;% n( H  {( |' e
      5,2,4,1,2,2,5,2,3,7,1,6,2;]

% M# H* y8 j1 n/ ^- M- t0 `9 e  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
" a; @8 \9 m6 c$ n- d3 v% w: ~% J1 t          1,2,3,6,2,2,1,4,3,1,5,3,1;9 H) i. T: c/ u1 n% q' ?
          1,2,3,1,2,5,1,2,4,1,2,3,2;
& w0 E& B8 {' K2 s2 o2 n% n          1,2,7,1,2,2,1,2,5,1,2,4,1;
! D" c8 H6 z  e6 q          5,2,3,3,5,2,1,2,3,1,2,3,6;0 F# N* F# \, G( ^
          1,2,3,1,2,2,1,6,5,1,2,6,4;
' r- n/ ^" R' i+ u% n- N3 n2 T6 T* |/ z          5,2,3,4,4,2,1,2,3,1,2,5,6;, P% a0 C" |: x9 p- h
          1,2,6,1,2,2,1,2,3,1,4,3,2;
1 D/ M4 m* Y8 f          1,2,3,4,2,7,1,4,3,1,7,3,3;+ f/ z( a$ w8 K0 {$ u3 Z. `6 X  a7 O
          5,2,3,5,2,2,1,2,3,1,2,3,4;+ X1 p1 H( A$ J! L  ^
          4,2,5,1,2,2,6,2,3,7,1,6,4;]
% initial guess of parameters% O. U& z0 K# z5 X
% 初始化参数
- z9 N- m& v* T. l8 Sprior1 = normalise(rand(Q,1));) B: j9 {& `* Y; {
transmat1 = mk_stochastic(rand(Q,Q));% |. c* K6 `' @5 J$ |
obsmat1 = mk_stochastic(rand(Q,O));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' W* b" V  ~, U
% 添加部分
/ ]" A$ J, n* l8 Y7 {7 Z    prior3 = normalise(rand(Q2,1));
0 L; u1 i  @/ `* L& L    transmat3 = mk_stochastic(rand(Q2,Q2));' \2 i( f3 j& k& q6 F
    obsmat3 = mk_stochastic(rand(Q2,O2));. l7 ~# }3 f: J4 X2 b
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% improve guess of parameters using EM
  s" T) ]) q, A/ C2 f" d- l9 M( [# I% 用data数据集训练参数矩阵形成新的HMM模型
8 i6 |# {, N( A4 e& [4 v4 I[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
9 W; j* x- D0 I+ A; U% 训练后那行观察值与HMM匹配度+ t$ ~6 ^: x3 d7 V& t% N) O
LL
5 |! r2 W4 d! R8 Q$ N6 c% 训练后的初始概率分布
  v. r) V" ~  g( mprior25 i/ d4 D% d6 }' ], T3 {" V5 V) n$ f& p
% 训练后的状态转移概率矩阵/ [8 b* o! ]8 p& o1 Z+ Z
transmat26 b: I# g; `. a+ C) A8 r
% 观察值概率矩阵
% X% {+ m3 N3 \8 Z. n8 W5 bobsmat2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ w1 K( K+ P7 ~! z* T! X
% 添加部分
0 I) G, \& n9 @1 x2 {  a7 @; o$ L# }    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));5 g3 X; A. G, H, A0 m: [
    LL24 z2 U" |2 S$ w; C9 R; o8 Y0 g
    prior4
  j" A, ]1 l: \1 q- u    transmat4
0 t3 `) z- h& @0 e# u: `, |4 c' X* z    obsmat45 M3 v3 c' J; ]# ]- ]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% use model to compute log likelihood+ E9 W# |  K6 N* x" R
% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
! Z# S. {) v" m" K6 m( ]& zdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
( `6 h# N" R) c, z& i+ W) vloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)" w6 {; G) U0 v
% log lik is slightly different than LL(end), since it is computed after the final M step
& b+ j3 d: t. c  U  L5 e0 M" X% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
% path为viterbi算法的结果,即最大概率path
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
: c  G9 |" f8 Q& d/ m# U' k9 O% 添加部分0 a# X) I( P. s/ t
loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)8 e3 h& q9 f, Q. n
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 U3 U0 B. V: m5 `2 W9 \5 |% |
B = multinomial_prob(data1,obsmat2);8 X5 i4 B' U8 y$ `7 V) @/ Z
path = viterbi_path(prior2, transmat2, B)6 y+ s# O: e- t% c* F
save('sa.mat');
2 _3 l. I0 g4 k7 p5 D
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ U* x3 V# ?# F8 ]. \+ L# S3 U
% 添加部分
, F2 b! ?# ]( J1 i: Y$ N: d    B2 = multinomial_prob(data1,obsmat4);
* f" B- K% y; r6 _    path2 = viterbi_path(prior4, transmat4, B2)
: J) U' P9 v! Z+ s5 @6 S* s    save('sa2.mat');
. z3 m* `; z& z8 f6 A. O    if loglik2 > loglik . o/ ]; T- D! b* p* C% `. F
        fuhe = 2, t& X7 [; J  B# j) ^8 C% c5 V7 E
    else
$ Y& o) ?- F8 o) G$ R- n! `        fuhe = 1
* }4 h7 f0 @6 L5 s+ I% [4 [    end   
* }5 n; v5 _) F3 q8 D8 T* ~" Z%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
------
运行结果
------
data =
     1     2     3     1     2     2     4     2     3     1     2     7     2
# z4 h4 G$ c% |* ]! k     1     2     3     6     2     2     1     4     3     1     5     3     1
- Q; j: r* d) D9 ^. U: ~# h) G     1     2     3     1     2     5     1     2     4     1     2     3     2# ?" x% L) C" b' e' z9 `/ r6 F" O8 d
     1     2     7     1     2     2     1     2     5     1     2     4     1" a& S" r2 V2 x; \
     5     2     3     3     5     2     1     2     3     1     2     3     68 t8 @( n' o& W0 O
     1     2     3     1     2     2     1     6     5     1     2     6     4
: A4 n* {4 R  O: ~# |& @1 m* v     5     2     3     4     4     2     1     2     3     1     2     5     6+ Y% U3 I% U! a8 A
     1     2     6     1     2     2     1     2     3     1     4     3     2
9 i. A* F" r, J     1     2     3     4     2     7     1     4     3     1     7     3     3
) [/ L0 e8 _$ e. A$ w( ^     5     2     3     5     2     2     1     2     3     1     2     3     4
  x7 U* S6 _: V2 W4 N     5     2     4     1     2     2     5     2     3     7     1     6     2
. M; @) E' f. n# @) L/ c' E* S- X
data2 =
     1     2     3     1     2     2     4     2     3     1     2     7     2/ c  a; U0 q" Y1 M. b' E
     1     2     3     6     2     2     1     4     3     1     5     3     18 z8 a1 V9 H1 G1 z+ }
     1     2     3     1     2     5     1     2     4     1     2     3     2
+ h4 k7 d; |5 G6 n/ d9 H4 [) q     1     2     7     1     2     2     1     2     5     1     2     4     1/ Y6 s% C' y9 v: A
     5     2     3     3     5     2     1     2     3     1     2     3     6
9 T3 D, Y* W! z- j# Q     1     2     3     1     2     2     1     6     5     1     2     6     41 v% m: q% S0 }, Y7 s
     5     2     3     4     4     2     1     2     3     1     2     5     66 I; a$ R  m+ o, f4 c
     1     2     6     1     2     2     1     2     3     1     4     3     2
6 g) c5 d3 Y7 W0 i- ^* h     1     2     3     4     2     7     1     4     3     1     7     3     3
( k3 d/ Q  |5 \7 C: N$ a! _$ }, F6 R     5     2     3     5     2     2     1     2     3     1     2     3     4
% j1 O) n- Y* s/ Z, s     4     2     5     1     2     2     6     2     3     7     1     6     4
iteration 1, loglik = -327.100465
& Q  Z, \4 C6 c5 r8 d, o, Y2 `( biteration 2, loglik = -238.259812+ R! L" ?7 \; K, ~0 I
iteration 3, loglik = -232.962948! N8 N  b, }2 u7 o
iteration 4, loglik = -223.323891
5 S5 F& M/ S) o  j! `iteration 5, loglik = -207.630875
# p7 t% l7 l* L( Viteration 6, loglik = -191.012697
7 n( D" ?) ]  c1 D4 I- Viteration 7, loglik = -178.611546
( U  B! I6 ]6 {; _$ aiteration 8, loglik = -171.524132
8 k  D; f( r! ]) k8 ^) d7 |& \$ M  `iteration 9, loglik = -168.626526( J) ?8 D: G/ a; v* \! A
iteration 10, loglik = -167.387057
1 \& e1 F% v% }$ T8 c. i4 q. qiteration 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
6 V4 n& _7 ?7 D( Z5 _
prior2 =
    0.00004 c6 m) p4 _0 m+ X  X& r( @
    0.0000
9 N* R2 d, {5 r4 z( \+ ~. j8 O    1.0000: f4 U$ Z0 P) s: E) E
    0.0000
7 J5 K* r, p9 C/ w2 o! y/ i+ @    0.0000
+ t: Z1 Q+ [2 Z. f
transmat2 =
    0.0138    0.0089    0.7680    0.1060    0.1033) F' m; S/ B0 T8 |7 q9 i# ]
    0.7811    0.0000    0.0199    0.0067    0.1923
5 w) O; ]' f1 {0 D2 Q5 f8 J% e( A    0.0000    0.9936    0.0000    0.0064    0.00004 Q4 o$ j" H" X
    0.1686    0.2604    0.2242    0.3398    0.0070: u$ r+ w& ~* @* c+ H% P
    0.0053    0.0406    0.8350    0.1184    0.0007

3 s" s7 j; p' S5 K& Lobsmat2 =
    0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.03512 m& [9 N% u& Q4 U7 C0 g4 X
    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228$ G; P  y" E0 w  t0 {
    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
4 }5 f4 _( Y: z1 i1 }, Y    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055# [* C9 e, b$ _5 ^+ q5 ?2 @" }+ B
    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
iteration 1, loglik = -277.738670' L5 k4 L5 C* r: i. `
iteration 2, loglik = -242.163247
! X. v: |6 L0 p5 j( witeration 3, loglik = -238.3219718 c( |8 C& H9 P; N. y3 d7 X9 K
iteration 4, loglik = -233.166746
; f5 v4 M% G2 Oiteration 5, loglik = -225.6822592 `+ L& B, O8 _0 I# B
iteration 6, loglik = -214.560296
/ v: Q3 L& R4 a7 V& I" c- diteration 7, loglik = -201.182015
! G2 m! X6 b1 l, w; K: J3 Kiteration 8, loglik = -189.4274535 y1 g/ k8 t( n' {2 X
iteration 9, loglik = -179.156352
; d; E3 t0 N: L6 g1 Z  Q4 Xiteration 10, loglik = -171.744096
: D1 m# H7 i2 x! g; hiteration 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

# c5 t" D0 M" u# M0 a0 J8 v* aprior4 =
    0.00008 t* F( x3 U  T/ [5 _6 D
    0.9982
2 F$ h. Q! y0 b    0.0004
/ s0 k% Z- _/ Z6 n1 L( C    0.0014
! D/ O1 X0 J6 i* w$ a, H, v* W    0.0000
' S* [4 m2 m4 O
transmat4 =
    0.0873    0.5277    0.2799    0.1007    0.00454 v, B2 q& [/ f' N% \
    0.0002    0.0000    0.0005    0.0000    0.9994
  D$ ?& }& v  y  f( {; T1 D    0.0180    0.0000    0.0118    0.0011    0.9692
( U" i0 d+ P' c    0.0436    0.0226    0.0810    0.0219    0.8310" v; z$ {, V# G. o& u/ q+ s5 l
    0.9746    0.0056    0.0003    0.0195    0.0000
' @" b, s: d3 x  p2 L$ V
obsmat4 =
    0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
* n! l( S; ]- g1 h- w, o: |$ g( Z8 m    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
: h9 Q) u% z  z* C$ w+ G7 L: i    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001/ h+ V- d1 y1 }7 s- M1 F+ C
    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
7 I8 n" v* l) v* `4 L$ R) n0 ~    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

: e2 H! |( ?% ?0 W0 T2 Y- C1 Gdata1 =
     5     2     4     1     2     2     5     2     3     7     1     6     2

; s% R- I+ [; _' y7 s0 Vloglik =
  -19.2351

+ W, s' U  n4 a# }3 q, bloglik2 =
  -21.0715

, s  E" p, t' B+ {& o! P. L0 Tpath =
     3     2     5     3     2     1     3     2     1     5     3     2     1

# f- |* ~) H+ }path2 =
     2     5     1     2     5     1     2     5     1     1     2     5     1
- \; {0 k" c7 m2 m' B
fuhe =
     1
: S7 S6 r: S6 q6 |
$ x( j, u$ v- t- R  r

: @( i) j9 w9 ?+ |; ?

HMM工具箱.rar

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

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






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