% ①定义一个HMM并训练这个HMM。4 y' T* ^1 k, \& T" l% s$ G % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。3 {( @, }# d+ ` % 修改:旺齐齐 % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O:观察状态数6 z2 n$ D! l3 N8 h& u! w }* { O = 7;" ^1 N* o% p$ x1 M8 n- g0 d7 X O2 = 7;# f) s' O" w. G1 l4 |0 `3 Y: s1 f6 H % Q:HMM状态数3 k( [" R% O9 j1 }6 q Q = 5; Q2 = 5; %训练的数据集,每一行数据就是一组训练的观察值8 o& ^$ s, g; z) t data=[1,2,3,1,2,2,4,2,3,1,2,7,2;5 X9 k% D5 Z* q- M 1,2,3,6,2,2,1,4,3,1,5,3,1;" g1 f' k$ b* r+ ^) [' a* l 1,2,3,1,2,5,1,2,4,1,2,3,2;& E1 a; J+ t: J7 M 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; b( u" R6 g* p% b m& P 1,2,3,1,2,2,1,6,5,1,2,6,4;6 b) ?# ~5 g" ~+ M 5,2,3,4,4,2,1,2,3,1,2,5,6;5 U5 s( H/ h7 |% }7 {. b 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;: A1 z4 l7 ?& ]6 E! r8 k' d 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;' o. h% O1 y* ^7 m- q% F3 j 1,2,3,6,2,2,1,4,3,1,5,3,1;) u) U |6 D9 `0 F# N c+ f- y 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;* H$ I" ~% a, f u& l 5,2,3,4,4,2,1,2,3,1,2,5,6;1 \" d) a T9 u% U! C3 p1 Z 1,2,6,1,2,2,1,2,3,1,4,3,2;/ }' G3 v$ k3 P 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;8 ?2 G- f. s4 Z: u' u5 B# |' i+ e 4,2,5,1,2,2,6,2,3,7,1,6,4;] % initial guess of parameters! N! W6 v& `: X % 初始化参数' L+ }+ Z) j$ A( I prior1 = normalise(rand(Q,1));, i; {: D; c/ h/ _4 M8 F transmat1 = mk_stochastic(rand(Q,Q));1 z R# L7 { O( p6 s# Y3 Z/ l obsmat1 = mk_stochastic(rand(Q,O)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分 prior3 = normalise(rand(Q2,1)); transmat3 = mk_stochastic(rand(Q2,Q2)); obsmat3 = mk_stochastic(rand(Q2,O2));' }/ `2 P b" G4 C$ C& z# [ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % improve guess of parameters using EM % 用data数据集训练参数矩阵形成新的HMM模型6 `; R4 U# ]/ ]0 R( ] [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));. C7 g8 P& ?" d" y5 L! H L* P. Z% c % 训练后那行观察值与HMM匹配度& y8 W' d" V; s6 U% f8 s LL5 `3 o0 ~! g9 O7 {; a % 训练后的初始概率分布 prior2% t# A5 Q4 p1 [* r9 H5 J1 r % 训练后的状态转移概率矩阵/ R4 P: V& a& O0 o transmat2 % 观察值概率矩阵- n1 P# K, y! U- Y obsmat2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4 X% u6 N x! b& F % 添加部分 [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1)); LL2' t1 f; N* z: d6 z8 K prior4 transmat49 A" i* y! _$ K' f8 ~ obsmat4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % use model to compute log likelihood % 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 % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。 % path为viterbi算法的结果,即最大概率path %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%9 E, S) Q7 L) O % 添加部分 loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2 }! E1 L& L' M" ^1 L- t B = multinomial_prob(data1,obsmat2); path = viterbi_path(prior2, transmat2, B) save('sa.mat'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% b) E6 h/ ^, R. C % 添加部分 B2 = multinomial_prob(data1,obsmat4);- ?) F: Y% j+ N" X path2 = viterbi_path(prior4, transmat4, B2)( v; G+ n+ r; j: P save('sa2.mat'); if loglik2 > loglik fuhe = 27 R6 t( ]3 \& j d s3 E else2 W: V# I6 Y$ D1 h0 Y! ~8 ]- u fuhe = 14 T; R* T9 F& L6 S* `1 X end / I. V) P( c! p% x %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ------ 运行结果 ------ 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 1 2 7 1 2 2 1 2 5 1 2 4 13 @9 b( j H: J9 L( A* 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 44 q* G' z( e5 N- j4 ? 5 2 3 4 4 2 1 2 3 1 2 5 6/ k ]3 t# y# p; K d& w 1 2 6 1 2 2 1 2 3 1 4 3 29 J l' G) h2 y 1 2 3 4 2 7 1 4 3 1 7 3 3# q# }4 f2 M$ k5 u5 u6 g 5 2 3 5 2 2 1 2 3 1 2 3 4+ E: Y0 j) x3 x# m' B ` 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 22 V5 |# V/ h% }: ^) G 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/ }) D' s- v# c; _9 F+ S4 Q 5 2 3 3 5 2 1 2 3 1 2 3 62 j, T" ?/ B! K 1 2 3 1 2 2 1 6 5 1 2 6 4% ?) N- \6 I: T. o/ Z 5 2 3 4 4 2 1 2 3 1 2 5 6$ V% {# z8 P; B: t& S* K% \- T! ^7 u 1 2 6 1 2 2 1 2 3 1 4 3 2/ E: m, I" y; x8 G* s$ g$ z Y 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 44 C' g2 l' M6 r9 W8 V* z- M 4 2 5 1 2 2 6 2 3 7 1 6 4 iteration 1, loglik = -327.100465) N6 e0 \" |( S* J iteration 2, loglik = -238.259812 iteration 3, loglik = -232.962948 iteration 4, loglik = -223.323891 iteration 5, loglik = -207.6308756 D8 ?, z! e& c v; ` iteration 6, loglik = -191.012697* A0 @. ]) G' U iteration 7, loglik = -178.611546 iteration 8, loglik = -171.524132) O2 l% s9 M5 | `' @* l# V iteration 9, loglik = -168.626526 iteration 10, loglik = -167.387057$ f3 H& g6 {9 X- }: s0 S. E6 d 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 4 a* Q2 {7 V# D$ K prior2 = 0.0000 0.0000 1.0000: T+ j2 x+ y; c! n 0.0000, j/ {. X) r) {, F 0.0000 , f5 p% D. E" F transmat2 = 0.0138 0.0089 0.7680 0.1060 0.1033 0.7811 0.0000 0.0199 0.0067 0.1923 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- L4 s5 ]) B& I6 E# X& V! w7 | 0.0000 0.8270 0.0000 0.0790 0.0256 0.0456 0.0228" h: T2 A( i9 z. i1 Q; C 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 0.0000 0.0784 0.3223 0.2014 0.0116 0.1525 0.2338 iteration 1, loglik = -277.738670* K9 S( k6 \# `; O iteration 2, loglik = -242.163247 iteration 3, loglik = -238.321971 iteration 4, loglik = -233.1667464 @; Y- _2 w/ l# i8 Q0 @* o iteration 5, loglik = -225.682259 iteration 6, loglik = -214.560296 iteration 7, loglik = -201.182015 iteration 8, loglik = -189.427453& e6 }5 U! ]2 G2 i2 i+ m) y5 e p" [8 u iteration 9, loglik = -179.1563520 [0 a6 @$ {$ j% [7 N iteration 10, loglik = -171.7440960 ]$ |. l; A/ }) K" c% e 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 1 v& m# X6 Y) j1 O prior4 = 0.0000 0.9982 0.0004 0.00146 Y* U2 v( v3 f. l8 k 0.0000 transmat4 = 0.0873 0.5277 0.2799 0.1007 0.0045 0.0002 0.0000 0.0005 0.0000 0.99945 i. y) A% l; [: D8 Z5 Z0 z 0.0180 0.0000 0.0118 0.0011 0.9692+ e8 a2 r# p2 Q) q: Z* [. Z: c# b 0.0436 0.0226 0.0810 0.0219 0.8310 0.9746 0.0056 0.0003 0.0195 0.0000 ! T2 w+ A$ ?* g 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.00006 b* F6 R( t4 A% x 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( z0 W6 c; w! t0 c: e" i2 | 0.0000 0.8172 0.0000 0.0943 0.0270 0.0389 0.0225 1 r; o, `7 y9 P* u% B2 f data1 = 5 2 4 1 2 2 5 2 3 7 1 6 2 loglik = -19.2351 ' h, e3 P& F) O% A5 H- D# X loglik2 = -21.0715 # ~, y4 J! T$ j- H path = 3 2 5 3 2 1 3 2 1 5 3 2 1 ! ~0 p- y# j6 c, [ path2 = 2 5 1 2 5 1 2 5 1 1 2 5 1 9 s1 V: v+ g9 d, m. V4 i- }0 J fuhe = 1 |
399.79 KB, 下载次数: 0, 下载积分: 体力 -2 点
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |