数学建模社区-数学中国

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

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

5 ]# s6 s# t! _- L4 c隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
1 k9 N, U0 m6 z' f' J5 C
% ①定义一个HMM并训练这个HMM。
( p/ N. h$ y. N; U5 D+ E( p5 E% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。, b: [- K2 O' X8 P7 N1 N9 c
% 修改:旺齐齐
$ r8 Y, T! ~" b! B% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。% T5 N3 c) L. `7 f$ c5 R
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O:观察状态数
1 F) A. S5 Q: H0 G6 u* L/ [! a% KO = 7;
4 S, K" D- j7 m# Z* zO2 = 7;9 E! I3 Z$ l% D+ f% E
% Q:HMM状态数3 X$ a* M( D( s- k* _( t& X
Q = 5;. ?/ J! M" N0 x
Q2 = 5;
6 ^" Y% ]2 L7 a%训练的数据集,每一行数据就是一组训练的观察值: t* a1 O, B0 r  G5 a  |2 j
data=[1,2,3,1,2,2,4,2,3,1,2,7,2;
! K  h+ V! U* P/ v$ j  z) N& ~      1,2,3,6,2,2,1,4,3,1,5,3,1;
' z5 {( ^- z  z, d. l% E      1,2,3,1,2,5,1,2,4,1,2,3,2;; v/ r! B; p/ d. v, p
      1,2,7,1,2,2,1,2,5,1,2,4,1;$ Y$ m" Q8 N$ S" T8 t% z
      5,2,3,3,5,2,1,2,3,1,2,3,6;( v6 Y( Y- l# u; z
      1,2,3,1,2,2,1,6,5,1,2,6,4;
. }9 e. F/ J) `! l      5,2,3,4,4,2,1,2,3,1,2,5,6;
1 f# g0 [8 {* Z1 F      1,2,6,1,2,2,1,2,3,1,4,3,2;! Y' J/ j8 l6 @# D* c- Q7 X4 F- P
      1,2,3,4,2,7,1,4,3,1,7,3,3;( S: R/ p5 K; D% X  r# j
      5,2,3,5,2,2,1,2,3,1,2,3,4;
5 w2 a. R) T1 G& \" q  Y+ k      5,2,4,1,2,2,5,2,3,7,1,6,2;]

0 b- _4 q$ ?" z& g- u/ E  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;. U3 B: K* G- x  ?, a
          1,2,3,6,2,2,1,4,3,1,5,3,1;
" b, ?5 B: s! H; h          1,2,3,1,2,5,1,2,4,1,2,3,2;/ c1 ?% _* \4 b8 J- B6 h' W+ }
          1,2,7,1,2,2,1,2,5,1,2,4,1;
  d+ o4 c" D5 C6 b# E$ O; N          5,2,3,3,5,2,1,2,3,1,2,3,6;
3 |* S* ]% y+ l0 L! Q. j% h          1,2,3,1,2,2,1,6,5,1,2,6,4;
8 E) v/ p) q/ p* X# J% f          5,2,3,4,4,2,1,2,3,1,2,5,6;
, k" M- ~. W6 w" f: m( s0 V9 E          1,2,6,1,2,2,1,2,3,1,4,3,2;  f8 L- X/ K8 m4 Z4 V
          1,2,3,4,2,7,1,4,3,1,7,3,3;
9 ]) I$ b, W/ b5 ~  U          5,2,3,5,2,2,1,2,3,1,2,3,4;' J& Z0 D. |) h2 U7 E
          4,2,5,1,2,2,6,2,3,7,1,6,4;]
% initial guess of parameters
' v8 K' d2 d* N* L2 p, k8 Q1 _% 初始化参数3 A) m0 y4 X9 C: X% E
prior1 = normalise(rand(Q,1));( P0 A3 P7 I( \  U6 A
transmat1 = mk_stochastic(rand(Q,Q));
$ Y1 V& z% p' {) h: j; _obsmat1 = mk_stochastic(rand(Q,O));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ @1 O; F4 y- _1 r! r' |: J, v
% 添加部分3 Q" N5 P. L+ Z7 E
    prior3 = normalise(rand(Q2,1));7 }+ |4 D$ M+ x
    transmat3 = mk_stochastic(rand(Q2,Q2));
/ r# V6 M) r/ `( @& {. C, T    obsmat3 = mk_stochastic(rand(Q2,O2));
, t9 q7 {1 u9 G+ q2 F# o# _2 y0 m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% improve guess of parameters using EM7 w. i! c, p+ V: f: q
% 用data数据集训练参数矩阵形成新的HMM模型
9 r' {( O% w+ O[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
+ H' p' q( r# D& i9 y" k* a! y- n+ y- U% 训练后那行观察值与HMM匹配度
( Z+ g" v2 v+ BLL& y- e7 c5 D. O+ ]9 _, F3 c
% 训练后的初始概率分布9 q% b9 p' L( y. W, F, H
prior2
6 C% d) r1 A% C' m* t% 训练后的状态转移概率矩阵
  `4 R7 L1 a0 _( \3 P, E! Gtransmat2; ~8 Y3 \) i3 c
% 观察值概率矩阵+ \! ~0 h- M! S/ A: @
obsmat2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; L: `" H4 F6 S. O$ M% 添加部分
4 c' n4 t/ J: d1 h. N    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
  S8 L% e8 d% g0 C    LL2
0 {# J+ |. M9 S6 l" H. q0 |    prior4
8 [/ I; w5 N% Q: f5 W9 ~    transmat4
% e  ~: n4 U; h; R, Y. i/ ]    obsmat4, u1 u' L& n6 L8 e% B7 K
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% use model to compute log likelihood3 M8 V! @$ j+ K4 ~4 Y8 U
% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
/ l  `7 J  g7 P. W8 h% Qdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
, l9 _" a7 K/ W. F  M( Dloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
* @2 m0 ^$ Y' N9 x% log lik is slightly different than LL(end), since it is computed after the final M step/ G( d4 I8 r& m1 ~  Y7 i
% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
% path为viterbi算法的结果,即最大概率path
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6 U3 `! j  N) o+ y: r$ T3 v% 添加部分& o: {& h6 R! G
loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)" B4 J9 ~8 n& _9 a' b. g
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

7 ?& @% t" I0 v4 m# U0 yB = multinomial_prob(data1,obsmat2);2 n! y. Y6 w6 L, l1 ~- r6 s
path = viterbi_path(prior2, transmat2, B); G& g2 j# Y: R% G
save('sa.mat');
( `. e' |' t$ m8 y8 f3 q$ Z
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%! E" e& }" V6 b8 a* P+ F- T, O
% 添加部分& }( G. I! e& L3 I$ C
    B2 = multinomial_prob(data1,obsmat4);  u' m! d+ {3 N/ P6 f
    path2 = viterbi_path(prior4, transmat4, B2)
# q0 ~; H% ^% `: m. T; K    save('sa2.mat');
  Z+ }; K/ n  h& c% h    if loglik2 > loglik
! ^. g7 j9 N% L1 N        fuhe = 2
" R) v& L  K: t' r    else
/ x' J' b7 k5 H2 e6 }- G% @5 A- D        fuhe = 1
/ [. W; k( v  [: i    end    ! U, c' n; }/ W( A/ c
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
------
运行结果
------
data =
     1     2     3     1     2     2     4     2     3     1     2     7     2
# S4 p. y3 L3 w  y% w: G     1     2     3     6     2     2     1     4     3     1     5     3     1  ^' H9 w* |* b2 X
     1     2     3     1     2     5     1     2     4     1     2     3     2$ n$ J+ l0 W$ u& V* g
     1     2     7     1     2     2     1     2     5     1     2     4     1
, e4 M# m* _/ C( B; s1 W' N+ I     5     2     3     3     5     2     1     2     3     1     2     3     6, p9 `" R6 V& i* f2 K
     1     2     3     1     2     2     1     6     5     1     2     6     4  J1 j( S' n& N2 j: ^
     5     2     3     4     4     2     1     2     3     1     2     5     6
* \( `  T; j7 ^: G2 ]$ Y1 H) @     1     2     6     1     2     2     1     2     3     1     4     3     20 J1 N2 F( `+ D8 r8 D
     1     2     3     4     2     7     1     4     3     1     7     3     3
# z$ W/ Z( v$ ?: D0 X  r+ q9 G     5     2     3     5     2     2     1     2     3     1     2     3     4
* ^6 ]& d& T3 H5 t# g. _     5     2     4     1     2     2     5     2     3     7     1     6     2
) n4 a. {- I. W, B+ A% [
data2 =
     1     2     3     1     2     2     4     2     3     1     2     7     2
* ^" I& ?! s' G& _5 ~' d$ ?2 C1 ?     1     2     3     6     2     2     1     4     3     1     5     3     1
8 |. ~9 S  o; P% I/ x; Y. g     1     2     3     1     2     5     1     2     4     1     2     3     2% x: x: ^0 O) N) ]
     1     2     7     1     2     2     1     2     5     1     2     4     19 v0 N3 C- h7 J% c  C/ J* H
     5     2     3     3     5     2     1     2     3     1     2     3     6
8 b( j# m- R: O# W/ b     1     2     3     1     2     2     1     6     5     1     2     6     4
4 R1 J+ g- H$ `8 _8 r; z4 o     5     2     3     4     4     2     1     2     3     1     2     5     6
' e7 y, ^9 [: T" b5 I     1     2     6     1     2     2     1     2     3     1     4     3     2
' B6 b- L! F9 p+ @3 b% E# S8 O     1     2     3     4     2     7     1     4     3     1     7     3     3# \1 R* h9 c) H# g/ a- {- n: B4 ?
     5     2     3     5     2     2     1     2     3     1     2     3     4; Y  I& O+ x! A% @3 t) p) E
     4     2     5     1     2     2     6     2     3     7     1     6     4
iteration 1, loglik = -327.100465
3 ?: ~2 l$ K6 x9 X; z' N4 {1 giteration 2, loglik = -238.2598127 Q" m$ I! ~' Z, x8 ?7 m5 e6 O
iteration 3, loglik = -232.962948
# _5 h4 K! I8 k3 u6 i3 R2 Kiteration 4, loglik = -223.323891% r) ~; T& j# j% w4 W
iteration 5, loglik = -207.6308752 G' W7 N$ p" T; v
iteration 6, loglik = -191.012697
# }( f) n9 o, ^( F, f2 ~* h4 F4 Hiteration 7, loglik = -178.6115468 f1 t# q0 X/ ~
iteration 8, loglik = -171.524132
: v% F0 ^3 u0 m5 n6 @2 Siteration 9, loglik = -168.6265261 x+ g0 @; Y* K+ p  S& i
iteration 10, loglik = -167.387057
3 h7 L; K+ p' o, |( u$ y2 \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 T2 ^: @) d" B  U/ M8 P) o4 }prior2 =
    0.0000) L+ V4 J6 H' e, G7 i. i
    0.0000$ S- M6 t( j- V7 E6 {! @5 a" R7 e
    1.0000
9 _; w% m- c: M$ V2 b    0.0000
* b0 K; a$ S2 r0 w) q    0.0000

8 u6 ]0 V. u. |# Atransmat2 =
    0.0138    0.0089    0.7680    0.1060    0.1033
1 o1 m& ]: M- \: v# x- V. r: O    0.7811    0.0000    0.0199    0.0067    0.19237 O. b! }9 l* ^# d! \) q0 L. l
    0.0000    0.9936    0.0000    0.0064    0.0000
2 a9 w& Q& ~8 A2 R8 \, A0 j    0.1686    0.2604    0.2242    0.3398    0.0070
- a# E7 M# S0 X) e, O# {! O    0.0053    0.0406    0.8350    0.1184    0.0007

8 n1 H$ J7 a2 G) Y9 c2 eobsmat2 =
    0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
+ [. O5 J; ?$ }1 c6 k: F    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228* }- C, B" k' y
    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000( b+ n, j/ R! @
    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055% I1 `/ G) z6 U) m* H
    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
iteration 1, loglik = -277.738670" u5 t% Z+ A7 o5 K
iteration 2, loglik = -242.163247
  z  h+ p% Q9 h6 r; Piteration 3, loglik = -238.321971
7 H. u; P2 ~, u; Fiteration 4, loglik = -233.166746
# w' N; y& J5 eiteration 5, loglik = -225.682259( w8 b9 V6 g- ?/ S' ~- @  `% W6 `+ F
iteration 6, loglik = -214.5602966 f) q, {; f! f) q! P8 r, ?8 w
iteration 7, loglik = -201.1820157 Z1 W* B4 r7 h" c8 j  Y
iteration 8, loglik = -189.427453( Y0 g6 @9 R' G8 {6 X) I
iteration 9, loglik = -179.1563526 R9 s& |  v5 q+ o4 i/ Y" Q
iteration 10, loglik = -171.744096
5 a& j2 R, I8 t1 U* e# G6 @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
6 J* ~: G0 z/ [5 t, S: S
prior4 =
    0.0000( Z: \: b6 Z! {5 u  T9 u
    0.9982
1 u+ Y8 r8 T6 B  M$ A    0.0004
# |0 g; F' t2 f, x# Q    0.0014- H- Y+ \. d8 c1 A2 U
    0.0000

- N" |, Y8 H$ q) f# ?9 \. Mtransmat4 =
    0.0873    0.5277    0.2799    0.1007    0.0045' [2 K( Y- e- P. P5 E/ C
    0.0002    0.0000    0.0005    0.0000    0.9994
3 O# t( d( ]$ F. m    0.0180    0.0000    0.0118    0.0011    0.9692
$ v0 \& `  z" r( I% u, ?* }+ _    0.0436    0.0226    0.0810    0.0219    0.8310
0 f$ {. t, H; ]    0.9746    0.0056    0.0003    0.0195    0.0000
. e+ @  i' p3 V' M# \
obsmat4 =
    0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
5 \7 a8 D" w+ S* {% T1 q' x, Z    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.00001 M( d  q. J/ r$ ^3 _. A* b- {
    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
( ~& c1 x& K$ L/ {. {1 ]. w    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
% J0 f- Y$ M" d    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

6 V' {0 n0 `  W4 k. Vdata1 =
     5     2     4     1     2     2     5     2     3     7     1     6     2

- _3 P+ _' V- |0 U% l% Y# ploglik =
  -19.2351

7 O- g3 a) y7 }loglik2 =
  -21.0715
, J' M  x# Q; z* x' `5 |* J, T
path =
     3     2     5     3     2     1     3     2     1     5     3     2     1
$ |1 Q$ p! E' \  ~2 p  p! Z2 h) [
path2 =
     2     5     1     2     5     1     2     5     1     1     2     5     1

2 U* d' _5 R5 G! ^4 Qfuhe =
     1

6 L1 x3 A% w- ~/ F! u- u
1 J9 P  ^; P% R* W( |6 e
; V- q; [6 K/ {$ c. M" F

HMM工具箱.rar

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

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






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