% ①定义一个HMM并训练这个HMM。$ y8 p. b. h8 m) Q& V" y % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。 % 修改:旺齐齐3 M4 K$ W- \4 T* Q % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O:观察状态数 O = 7; O2 = 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; %训练的数据集,每一行数据就是一组训练的观察值 data=[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,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; 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; I* y* ]- r3 v7 I 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;% n( H {( |' e 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; 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; 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;0 F# N* F# \, G( ^ 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;, P% a0 C" |: x9 p- h 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;+ 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 % 初始化参数 prior1 = 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 % 添加部分 prior3 = normalise(rand(Q2,1)); 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 % 用data数据集训练参数矩阵形成新的HMM模型 [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1)); % 训练后那行观察值与HMM匹配度+ t$ ~6 ^: x3 d7 V& t% N) O LL % 训练后的初始概率分布 prior25 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 % 观察值概率矩阵 obsmat2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ w1 K( K+ P7 ~! z* T! X % 添加部分 [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 transmat4 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] data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2] loglik = 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 % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。 % path为viterbi算法的结果,即最大概率path %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分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 % 添加部分 B2 = multinomial_prob(data1,obsmat4); path2 = viterbi_path(prior4, transmat4, B2) save('sa2.mat'); if loglik2 > loglik . o/ ]; T- D! b* p* C% `. F fuhe = 2, t& X7 [; J B# j) ^8 C% c5 V7 E else fuhe = 1 end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ------ 运行结果 ------ 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# ?" 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 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 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 . 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 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 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 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 4 2 5 1 2 2 6 2 3 7 1 6 4 iteration 1, loglik = -327.100465 iteration 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 iteration 5, loglik = -207.630875 iteration 6, loglik = -191.012697 iteration 7, loglik = -178.611546 iteration 8, loglik = -171.524132 iteration 9, loglik = -168.626526( J) ?8 D: G/ a; v* \! A 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 6 V4 n& _7 ?7 D( Z5 _ prior2 = 0.00004 c6 m) p4 _0 m+ X X& r( @ 0.0000 1.0000: f4 U$ Z0 P) s: E) E 0.0000 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 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 obsmat2 = 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 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 iteration 3, loglik = -238.3219718 c( |8 C& H9 P; N. y3 d7 X9 K iteration 4, loglik = -233.166746 iteration 5, loglik = -225.6822592 `+ L& B, O8 _0 I# B iteration 6, loglik = -214.560296 iteration 7, loglik = -201.182015 iteration 8, loglik = -189.4274535 y1 g/ k8 t( n' {2 X iteration 9, loglik = -179.156352 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 prior4 = 0.00008 t* F( x3 U T/ [5 _6 D 0.9982 0.0004 0.0014 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 0.0180 0.0000 0.0118 0.0011 0.9692 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 0.7939 0.0001 0.0000 0.0745 0.1277 0.0038 0.0000 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 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 path = 3 2 5 3 2 1 3 2 1 5 3 2 1 path2 = 2 5 1 2 5 1 2 5 1 1 2 5 1 - \; {0 k" c7 m2 m' B fuhe = 1 |
399.79 KB, 下载次数: 0, 下载积分: 体力 -2 点
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |