% ①定义一个HMM并训练这个HMM。 % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。, b: [- K2 O' X8 P7 N1 N9 c % 修改:旺齐齐 % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。% T5 N3 c) L. `7 f$ c5 R %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O:观察状态数 O = 7; O2 = 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; %训练的数据集,每一行数据就是一组训练的观察值: t* a1 O, B0 r G5 a |2 j data=[1,2,3,1,2,2,4,2,3,1,2,7,2; 1,2,3,6,2,2,1,4,3,1,5,3,1; 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; 5,2,3,4,4,2,1,2,3,1,2,5,6; 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,2,4,1,2,2,5,2,3,7,1,6,2;] 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; 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; 5,2,3,3,5,2,1,2,3,1,2,3,6; 1,2,3,1,2,2,1,6,5,1,2,6,4; 5,2,3,4,4,2,1,2,3,1,2,5,6; 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; 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 % 初始化参数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)); 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)); obsmat3 = mk_stochastic(rand(Q2,O2)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % improve guess of parameters using EM7 w. i! c, p+ V: f: q % 用data数据集训练参数矩阵形成新的HMM模型 [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1)); % 训练后那行观察值与HMM匹配度 LL& y- e7 c5 D. O+ ]9 _, F3 c % 训练后的初始概率分布9 q% b9 p' L( y. W, F, H prior2 % 训练后的状态转移概率矩阵 transmat2; ~8 Y3 \) i3 c % 观察值概率矩阵+ \! ~0 h- M! S/ A: @ obsmat2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分 [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1)); LL2 prior4 transmat4 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] data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2] loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2) % 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分& o: {& h6 R! G loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)" B4 J9 ~8 n& _9 a' b. g %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% B = 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) save('sa2.mat'); if loglik2 > loglik fuhe = 2 else fuhe = 1 end ! U, c' n; }/ W( A/ c %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ------ 运行结果 ------ data = 1 2 3 1 2 2 4 2 3 1 2 7 2 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 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 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 5 2 3 5 2 2 1 2 3 1 2 3 4 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 1 2 3 6 2 2 1 4 3 1 5 3 1 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 1 2 3 1 2 2 1 6 5 1 2 6 4 5 2 3 4 4 2 1 2 3 1 2 5 6 1 2 6 1 2 2 1 2 3 1 4 3 2 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 iteration 2, loglik = -238.2598127 Q" m$ I! ~' Z, x8 ?7 m5 e6 O iteration 3, loglik = -232.962948 iteration 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 iteration 7, loglik = -178.6115468 f1 t# q0 X/ ~ iteration 8, loglik = -171.524132 iteration 9, loglik = -168.6265261 x+ g0 @; Y* K+ p S& i iteration 10, loglik = -167.387057 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 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 0.0000 0.0000 transmat2 = 0.0138 0.0089 0.7680 0.1060 0.1033 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 0.1686 0.2604 0.2242 0.3398 0.0070 0.0053 0.0406 0.8350 0.1184 0.0007 obsmat2 = 0.0000 0.2351 0.5738 0.0256 0.1118 0.0186 0.0351 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 iteration 3, loglik = -238.321971 iteration 4, loglik = -233.166746 iteration 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 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 0.0004 0.0014- H- Y+ \. d8 c1 A2 U 0.0000 transmat4 = 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 0.0180 0.0000 0.0118 0.0011 0.9692 0.0436 0.0226 0.0810 0.0219 0.8310 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 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 0.4527 0.0622 0.0637 0.2568 0.0549 0.0295 0.0802 0.0000 0.8172 0.0000 0.0943 0.0270 0.0389 0.0225 data1 = 5 2 4 1 2 2 5 2 3 7 1 6 2 loglik = -19.2351 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 fuhe = 1 |
399.79 KB, 下载次数: 0, 下载积分: 体力 -2 点
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |