% ①定义一个HMM并训练这个HMM。" H& }, _: Z1 w+ v$ ?2 ]6 _0 a6 L& c1 f % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。 % 修改:旺齐齐- u+ U! q. d9 w# ~ % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O:观察状态数 O = 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 %训练的数据集,每一行数据就是一组训练的观察值 data=[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; 1,2,3,1,2,5,1,2,4,1,2,3,2; 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; 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; 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; 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; 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; 4,2,5,1,2,2,6,2,3,7,1,6,4;] % initial guess of parameters % 初始化参数 prior1 = normalise(rand(Q,1)); transmat1 = mk_stochastic(rand(Q,Q));2 q* C \2 Z" L% Z obsmat1 = mk_stochastic(rand(Q,O)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分) J* t. O) C' B: a; j* N7 F prior3 = normalise(rand(Q2,1)); transmat3 = mk_stochastic(rand(Q2,Q2));/ J7 a/ W& ]+ h: i( r obsmat3 = mk_stochastic(rand(Q2,O2)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % improve guess of parameters using EM8 q1 C2 N& \! X" F: V % 用data数据集训练参数矩阵形成新的HMM模型 [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1)); % 训练后那行观察值与HMM匹配度" k, i, d" I1 O) e LL % 训练后的初始概率分布 prior2& ~, 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 % 观察值概率矩阵 obsmat2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分 [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1)); 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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] loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2) % log lik is slightly different than LL(end), since it is computed after the final M step % 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% B = multinomial_prob(data1,obsmat2); path = 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) 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 fuhe = 1 end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ------ 运行结果 ------ 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 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 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 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: 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 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 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 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 iteration 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 iteration 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 prior2 = 0.00007 Q6 B/ @( J1 @2 Y2 C& {: I 0.0000 1.0000# G+ V) N" V6 @7 s, [# z 0.0000 0.0000 transmat2 = 0.0138 0.0089 0.7680 0.1060 0.1033 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 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.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 iteration 5, loglik = -225.682259. D* A; X* P% O, d# M7 T, f7 ? iteration 6, loglik = -214.560296 iteration 7, loglik = -201.182015 iteration 8, loglik = -189.4274533 s. f+ V9 ]( a+ I iteration 9, loglik = -179.156352 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 prior4 = 0.0000 0.9982 0.0004 0.0014 0.0000 5 n* D6 @, t# ?- z" v6 J transmat4 = 0.0873 0.5277 0.2799 0.1007 0.0045 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 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.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 data1 = 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 |
399.79 KB, 下载次数: 0, 下载积分: 体力 -2 点
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |