数学建模社区-数学中国

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

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

) T- g; d4 U! [隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱# \9 D# w1 q& m% q+ k6 f5 I
% ①定义一个HMM并训练这个HMM。" H& }, _: Z1 w+ v$ ?2 ]6 _0 a6 L& c1 f
% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
! B* Y% Y; f' B4 t/ R- S% 修改:旺齐齐- u+ U! q. d9 w# ~
% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
/ s7 d3 Q! G( z5 m+ A/ ~* i9 M%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O:观察状态数
( s" E% a/ M. I$ R- MO = 7;0 Y. Z3 S4 q- j+ O% V8 z: {
O2 = 7;0 D8 }' B& ^8 J3 f
% Q:HMM状态数0 y& i7 u& Y  W) X
Q = 5;( K5 U, O  D7 S$ }( P( W, W& Q
Q2 = 5;2 G& n- y! I5 C! n
%训练的数据集,每一行数据就是一组训练的观察值
) o9 u  B; u* X3 Ddata=[1,2,3,1,2,2,4,2,3,1,2,7,2;: N* \( E: j8 C  h
      1,2,3,6,2,2,1,4,3,1,5,3,1;
2 C" N( J8 I( Q: p9 d! Z8 r# @      1,2,3,1,2,5,1,2,4,1,2,3,2;
/ n& R* d; n" N$ r: t! ]+ v      1,2,7,1,2,2,1,2,5,1,2,4,1;+ l* ~1 C: O: [* Z* u+ @
      5,2,3,3,5,2,1,2,3,1,2,3,6;9 E: }: |4 `3 `3 ~8 R1 Z
      1,2,3,1,2,2,1,6,5,1,2,6,4;
( r: U( E3 f1 N2 J, O  y      5,2,3,4,4,2,1,2,3,1,2,5,6;$ x7 U: O6 b' }! A! X/ K
      1,2,6,1,2,2,1,2,3,1,4,3,2;
& E, i4 y+ ]4 }2 w: |& f      1,2,3,4,2,7,1,4,3,1,7,3,3;/ j5 z/ o- Z" P% i, B6 a, R
      5,2,3,5,2,2,1,2,3,1,2,3,4;# L4 Z5 h; c2 V5 O9 f8 T# K* C1 Q
      5,2,4,1,2,2,5,2,3,7,1,6,2;]
$ Q( n3 F9 C4 B* ]$ ^1 Q
  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;  R7 l0 q8 F& u- Y( v3 `! X
          1,2,3,6,2,2,1,4,3,1,5,3,1;+ Z+ _% g+ l7 u0 @& |& b' u$ S' v
          1,2,3,1,2,5,1,2,4,1,2,3,2;
9 J, B. V4 N* f( y          1,2,7,1,2,2,1,2,5,1,2,4,1;0 O. I6 ^1 r8 p" t0 D
          5,2,3,3,5,2,1,2,3,1,2,3,6;! p1 @, Q& P4 ^( |* b* @( ^5 a- A
          1,2,3,1,2,2,1,6,5,1,2,6,4;" I; b' B0 ~9 b7 L1 D
          5,2,3,4,4,2,1,2,3,1,2,5,6;" R3 E+ M3 l. ?6 t5 L
          1,2,6,1,2,2,1,2,3,1,4,3,2;
2 I6 s6 c/ m2 R7 X# B) U5 W# m' R          1,2,3,4,2,7,1,4,3,1,7,3,3;% [5 u: X) s" @+ p. z9 C
          5,2,3,5,2,2,1,2,3,1,2,3,4;
  c5 j9 @  G% L          4,2,5,1,2,2,6,2,3,7,1,6,4;]
% initial guess of parameters
0 [# d  F( z* V% 初始化参数
: m+ t' p! x4 W; k; H% s- Tprior1 = normalise(rand(Q,1));
. C' R5 [- A# R, Z: Utransmat1 = mk_stochastic(rand(Q,Q));2 q* C  \2 Z" L% Z
obsmat1 = mk_stochastic(rand(Q,O));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/ \  u. |/ \$ f" `( p- z5 }( W% 添加部分) J* t. O) C' B: a; j* N7 F
    prior3 = normalise(rand(Q2,1));
+ m3 @+ Q* l2 V5 X2 b    transmat3 = mk_stochastic(rand(Q2,Q2));/ J7 a/ W& ]+ h: i( r
    obsmat3 = mk_stochastic(rand(Q2,O2));
# w' _2 k9 ~  M$ a$ d! w%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% improve guess of parameters using EM8 q1 C2 N& \! X" F: V
% 用data数据集训练参数矩阵形成新的HMM模型
6 B) r; d% _* G; p# a. _[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
: Q& i: I5 g* {& N$ U  D5 ^% 训练后那行观察值与HMM匹配度" k, i, d" I1 O) e
LL
0 J& c5 G' b8 T1 f% 训练后的初始概率分布
+ ~; y  @& d$ V0 P0 u3 Wprior2& ~, s) y; B2 v4 o, B/ I/ M
% 训练后的状态转移概率矩阵0 ?$ v: j" V1 M9 f: N5 ?0 Q
transmat21 x" T1 d/ U- [0 ~  W* n
% 观察值概率矩阵
. |: [  E/ l! Iobsmat2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' q0 F' X5 S; U$ T  ~5 I9 F* f) ]+ Z% 添加部分
- q: F2 d6 r; i9 C+ p    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
1 D, z' k5 c# x/ _    LL2% Z& P% g7 L- H% g" H8 |# N  O
    prior48 p0 G5 V# o* T5 i3 ~! L9 P
    transmat4$ \6 y; L4 p$ E
    obsmat4
8 i7 k# n. u" ^' A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% use model to compute log likelihood8 C0 \! K8 M( M0 v
% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1], v+ f" I, b. X
data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
% S. T. U. W. @8 L8 M$ iloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
1 p& H9 f+ g+ ?. b# W  K( }( s% log lik is slightly different than LL(end), since it is computed after the final M step
9 q! h: x3 D* i+ t+ ^% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
% path为viterbi算法的结果,即最大概率path
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%0 U  g" }( G- S$ {( H; d1 a
% 添加部分7 u9 T, r& l" M/ e3 e5 b# M
loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)/ A0 \* k, b+ T
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

; f* _9 o7 g/ E+ RB = multinomial_prob(data1,obsmat2);
4 o& x/ F! O/ x4 Y! r; z% N8 h  dpath = viterbi_path(prior2, transmat2, B)2 ^' ~7 m$ A, q0 j
save('sa.mat');
9 d) d5 B/ v& e# `" Q8 J5 S
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4 Y- i0 X9 [7 X% r
% 添加部分, E% c  D, [: h4 K4 H% r
    B2 = multinomial_prob(data1,obsmat4);9 v' y3 Y. J: P/ c# \
    path2 = viterbi_path(prior4, transmat4, B2)
2 u( P4 y3 a9 c* z    save('sa2.mat');$ B0 H0 M: t% t# Y
    if loglik2 > loglik 6 Y# \' p% y. L9 [5 A: @8 A
        fuhe = 27 ?. m7 [2 ^# J1 v# A
    else
* z) E$ F3 }% ^$ O" x        fuhe = 1
8 N' y2 j/ S' G    end   
6 o4 ~0 x6 O% M, H%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
------
运行结果
------
data =
     1     2     3     1     2     2     4     2     3     1     2     7     2$ @- J4 z/ y$ H1 i
     1     2     3     6     2     2     1     4     3     1     5     3     15 d) Z3 f* D" }/ D8 _$ ~% z+ R
     1     2     3     1     2     5     1     2     4     1     2     3     2
$ [6 V2 T) h2 z7 @: E& `0 X     1     2     7     1     2     2     1     2     5     1     2     4     1/ H. Q7 g+ }' D3 q; c
     5     2     3     3     5     2     1     2     3     1     2     3     6
! |: Q9 Z7 V" z- x: v4 q  Y2 }     1     2     3     1     2     2     1     6     5     1     2     6     4. T  `7 V3 |& H* a" G1 P
     5     2     3     4     4     2     1     2     3     1     2     5     67 h0 D* j% F$ B4 i1 X9 d
     1     2     6     1     2     2     1     2     3     1     4     3     2
- ^) T$ y( B2 M' ~6 `$ H- K     1     2     3     4     2     7     1     4     3     1     7     3     3
+ R  E8 e* t8 A0 D8 h6 h     5     2     3     5     2     2     1     2     3     1     2     3     4: T9 x) X: k1 S- ~8 {
     5     2     4     1     2     2     5     2     3     7     1     6     2
7 I3 ~+ y/ U! G
data2 =
     1     2     3     1     2     2     4     2     3     1     2     7     2* [" A, \) R! X5 }& t/ c+ c! a  k
     1     2     3     6     2     2     1     4     3     1     5     3     1
8 x( S8 `6 w% u* K9 L* t7 O/ C     1     2     3     1     2     5     1     2     4     1     2     3     22 y# X1 C) ~5 U5 j6 i
     1     2     7     1     2     2     1     2     5     1     2     4     1. p. m% U3 P7 U: m& ]  ~+ a
     5     2     3     3     5     2     1     2     3     1     2     3     6
# G  @4 y5 t2 l$ k/ y     1     2     3     1     2     2     1     6     5     1     2     6     4
* d$ b' {- }* U4 q     5     2     3     4     4     2     1     2     3     1     2     5     6
% v& L0 b; z9 m' [: ?+ P2 U$ M     1     2     6     1     2     2     1     2     3     1     4     3     2
" z, ^: X8 J9 [. A  T     1     2     3     4     2     7     1     4     3     1     7     3     32 f9 ]9 m2 L$ j8 _( W
     5     2     3     5     2     2     1     2     3     1     2     3     4' E; E3 H' w+ d2 }; g+ A# p3 B
     4     2     5     1     2     2     6     2     3     7     1     6     4
iteration 1, loglik = -327.100465% ~% J' j2 ^) r- y
iteration 2, loglik = -238.2598129 ~' j* S2 k( {1 ^6 L$ V
iteration 3, loglik = -232.962948+ |' a! i) w" P
iteration 4, loglik = -223.323891
- i% T- S/ a+ O% @5 Hiteration 5, loglik = -207.6308753 K) M9 z* C, K
iteration 6, loglik = -191.012697* u' Y. v, N% `& y: p( [
iteration 7, loglik = -178.6115462 N9 E& Y) O/ v. S; Z! ^1 A+ w* T
iteration 8, loglik = -171.524132
) b0 r0 b. T9 u( E0 v2 s+ p4 d2 ], Biteration 9, loglik = -168.626526  g5 M* V$ x& F8 H& z- u: R
iteration 10, loglik = -167.3870577 K4 {% P+ R" ?* ^" v. j5 I
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

0 D5 P& b* ?; b* _, h" }( Wprior2 =
    0.00007 Q6 B/ @( J1 @2 Y2 C& {: I
    0.0000
: |- X8 N# M  g2 l( X, x1 n: z    1.0000# G+ V) N" V6 @7 s, [# z
    0.0000
5 p* q  j) l" P    0.0000

( W( \- n! B# ]* ^, Dtransmat2 =
    0.0138    0.0089    0.7680    0.1060    0.1033
( ?8 {" c+ M# g. v* A) w    0.7811    0.0000    0.0199    0.0067    0.19235 X- q1 I4 O2 h- m6 ]# H) N" Z9 g
    0.0000    0.9936    0.0000    0.0064    0.00000 |9 ?5 z+ W) ?. J
    0.1686    0.2604    0.2242    0.3398    0.0070
$ F- `# w% X# w) u  T    0.0053    0.0406    0.8350    0.1184    0.0007

$ R$ {; P  T5 i# J& W+ Z$ Uobsmat2 =
    0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
" H5 H& \! J& @7 G    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.02280 G+ F5 }8 N  I
    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000/ G' I$ S: t9 K7 Q; e
    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055, k' o1 }1 k; G
    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
iteration 1, loglik = -277.738670& Q4 L$ R* \  F) X; h
iteration 2, loglik = -242.163247  F2 m" l* M; m5 T( C7 L
iteration 3, loglik = -238.3219717 s# t$ h: J5 _+ c4 d" m* X
iteration 4, loglik = -233.166746
# l& d1 I7 h& k+ m! Hiteration 5, loglik = -225.682259. D* A; X* P% O, d# M7 T, f7 ?
iteration 6, loglik = -214.560296
6 f2 C: \9 V3 |iteration 7, loglik = -201.182015
! g; I% M8 `6 Y6 m  k2 citeration 8, loglik = -189.4274533 s. f+ V9 ]( a+ I
iteration 9, loglik = -179.156352
, p9 L& g! B- ]* \7 m* `iteration 10, loglik = -171.744096( ^: ]- N! w" b9 R5 T5 x. q) Y
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

- o6 o/ S& @- \1 wprior4 =
    0.0000
+ b$ Y9 a' z1 H4 o& N  P: @4 ~    0.9982
2 O. U$ {; s1 o    0.0004
& B; ?, a/ |4 U$ y    0.0014
) ^" O# |1 T+ p( t9 {9 E7 l% w    0.0000
5 n* D6 @, t# ?- z" v6 J
transmat4 =
    0.0873    0.5277    0.2799    0.1007    0.0045
5 p+ @, ]" p: u4 ]0 o0 z- i' R! O    0.0002    0.0000    0.0005    0.0000    0.99949 U# e, i0 b+ J4 |9 y
    0.0180    0.0000    0.0118    0.0011    0.9692" R0 }, j2 R$ A0 D" o, ^
    0.0436    0.0226    0.0810    0.0219    0.83101 d8 V- G- g9 ?: {7 `( c# g9 \
    0.9746    0.0056    0.0003    0.0195    0.0000

0 P" Y+ D% E5 ?obsmat4 =
    0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
" ~$ c; i5 o. Y4 L5 a$ O    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000' H4 s! @* Q( t* S
    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.00016 W% s( F. N0 N9 C' X; _; o. v
    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802+ j! T( _; }( I! O# x; r6 a
    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

5 ~- a( Z( O3 x2 T5 Qdata1 =
     5     2     4     1     2     2     5     2     3     7     1     6     2
8 d& B. \# N6 o/ {9 i" L  i# Z2 `
loglik =
  -19.2351
; @3 W6 H; h9 Q3 c4 C- D% I$ I4 s
loglik2 =
  -21.0715
' x  x9 A1 S& a/ m0 p- \
path =
     3     2     5     3     2     1     3     2     1     5     3     2     1
0 v" ~# D+ x4 j; F
path2 =
     2     5     1     2     5     1     2     5     1     1     2     5     1
3 u' h' J% N+ |
fuhe =
     1

* b3 r8 D6 I8 v% F2 z+ s
4 p# D2 c: b4 `- N# t
5 U* P2 B& Q+ }; I

HMM工具箱.rar

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

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






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