% ①定义一个HMM并训练这个HMM。$ L5 a" }3 f4 k % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。4 _1 @3 q6 N$ A6 i' k* ` % 修改:旺齐齐 % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O:观察状态数 O = 7; O2 = 7; % Q:HMM状态数/ I/ [4 o7 o" C; g Q = 5; Q2 = 5;* p$ K( D. X7 }' M+ s$ Y" x %训练的数据集,每一行数据就是一组训练的观察值, @- L* \, @- r: c0 Z$ d1 x8 G data=[1,2,3,1,2,2,4,2,3,1,2,7,2;5 j; O9 g* v7 W7 N 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;' V& x8 c5 E% a' f6 z0 O 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 m, B Z" h6 L7 j 1,2,3,4,2,7,1,4,3,1,7,3,3;4 O- A- }' m. c7 \ 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;] - l4 u r& T& K- D/ s( S data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;. a k0 n# _1 x2 b 1,2,3,6,2,2,1,4,3,1,5,3,1;- ?2 y$ P; @/ l 1,2,3,1,2,5,1,2,4,1,2,3,2;7 |# S; d! d: d$ N V# T' g 1,2,7,1,2,2,1,2,5,1,2,4,1;) }- O# r) o7 L( Z0 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;6 c% b- Q8 u/ d# `$ T 1,2,3,4,2,7,1,4,3,1,7,3,3;8 D' q! ]5 P) }2 k& R ?7 z 5,2,3,5,2,2,1,2,3,1,2,3,4;; E9 j0 h- l3 H$ G4 D9 |# ` 4,2,5,1,2,2,6,2,3,7,1,6,4;] % initial guess of parameters % 初始化参数 prior1 = normalise(rand(Q,1));( p7 }2 d6 q, K transmat1 = mk_stochastic(rand(Q,Q)); obsmat1 = mk_stochastic(rand(Q,O)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分 prior3 = normalise(rand(Q2,1)); transmat3 = mk_stochastic(rand(Q2,Q2)); obsmat3 = mk_stochastic(rand(Q2,O2)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % improve guess of parameters using EM % 用data数据集训练参数矩阵形成新的HMM模型/ b, }. o0 B' t) P: a, u% n' | [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1)); % 训练后那行观察值与HMM匹配度( ^' Z+ z% b9 H( C1 a |7 q LL % 训练后的初始概率分布 prior2! S) {- F H) S0 Q0 o1 [3 S % 训练后的状态转移概率矩阵 transmat28 F3 f0 m8 a, E% x4 {; ~ % 观察值概率矩阵- V6 ~5 [" k3 o% Q5 o/ ^; ?' l A% Y obsmat2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" Y' N t# X" w6 c( n" Y$ ]! N % 添加部分0 D9 f5 z8 x- v' o: g" c% c$ O [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));8 O% T9 V; e6 g; V s4 ^! q: x LL2, D; F( A" C; Z3 A1 }! v; ?" Z prior4: G( l# C) R9 c, N transmat4 obsmat4) g! j* _, z: v( ^$ ~" S %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 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]# g! ^; Z" c5 @0 a loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)* w5 k0 C( z& `3 }9 Y4 l; v % log lik is slightly different than LL(end), since it is computed after the final M step, G0 W+ i& G1 R1 L % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。 % path为viterbi算法的结果,即最大概率path %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" e8 P9 Y7 H* u+ } % 添加部分- t4 R; h0 y7 v- U loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)2 H' l- ?' e& e3 p( K %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A: [# u5 R6 X% B$ O B = multinomial_prob(data1,obsmat2); path = viterbi_path(prior2, transmat2, B) save('sa.mat'); 6 G: f/ y5 s4 K" r n7 W3 F %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%! \+ E4 l* R# [/ W % 添加部分/ Q$ V* @3 y( c1 \4 N) N B2 = multinomial_prob(data1,obsmat4);6 D- l7 t" S& b Z; D% e6 R& z path2 = viterbi_path(prior4, transmat4, B2)' x5 A, [: S- t: M6 ~ save('sa2.mat'); if loglik2 > loglik : b- R4 g' ^. i; q0 M6 m! x" f( r fuhe = 2% V7 u O( S5 ^: g else fuhe = 1/ W/ _" p5 l& M1 j ` end J( L) A" i; M3 s %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ------ 运行结果 ------ 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/ T2 ?0 Y: X2 B 1 2 3 1 2 5 1 2 4 1 2 3 2* _# A# E2 T5 @! P, J3 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- M9 ~( l& m4 ~- e, A 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, g7 z7 s6 Q- k1 \: I j 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 6 C6 m1 Y" Y8 f' O& T 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 16 E( z5 |% q& n( `5 z1 P& A 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- \% Z. J/ }* p- M 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 36 A9 u: u) B2 a% U 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 k: ~& _ R* B) ~' h: x. \ iteration 3, loglik = -232.962948 iteration 4, loglik = -223.3238913 q3 R4 w3 ~7 @! n* _, \4 b- r4 u iteration 5, loglik = -207.630875% Q% n) A2 `* u& @ iteration 6, loglik = -191.012697 iteration 7, loglik = -178.611546) ^! Z: O! r+ e4 H iteration 8, loglik = -171.524132 iteration 9, loglik = -168.6265260 C- r) O3 C$ n$ [. n; ^9 g* M 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 0 F/ G- N2 e3 Q prior2 = 0.0000# P- T, I$ V6 o5 C+ D1 n9 F 0.0000" N. Y" t; _4 B0 F$ J; d8 e* E% X 1.00008 `: e) K* _# b, W. s+ j' S* Z 0.0000. ~4 v# t3 p4 I# \, f 0.0000 5 i3 T5 ]3 I7 k2 ? V7 D transmat2 = 0.0138 0.0089 0.7680 0.1060 0.1033: j6 m4 z- _$ @ 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.00707 {' D0 z1 _, {- W# w4 R/ T; Q: T 0.0053 0.0406 0.8350 0.1184 0.0007 obsmat2 = 0.0000 0.2351 0.5738 0.0256 0.1118 0.0186 0.03515 E) I# S; N) P, j' Y% \ 0.0000 0.8270 0.0000 0.0790 0.0256 0.0456 0.0228" V8 L# S7 J; H7 G# i 0.7514 0.0021 0.0011 0.0550 0.1472 0.0432 0.00003 ^; ^) s' L. D' s, \ 0.0014 0.4208 0.0447 0.4366 0.0023 0.0887 0.0055: K/ _2 M, r+ |/ i# r7 E 0.0000 0.0784 0.3223 0.2014 0.0116 0.1525 0.2338 iteration 1, loglik = -277.738670 iteration 2, loglik = -242.163247& t9 N. ^9 @8 _! v4 [ iteration 3, loglik = -238.321971; W4 U% I1 F2 \/ L" F' N iteration 4, loglik = -233.166746$ E% J+ H1 C" _8 z; o iteration 5, loglik = -225.682259 iteration 6, loglik = -214.560296# {7 ]; Z' J+ K/ ~+ s iteration 7, loglik = -201.182015 iteration 8, loglik = -189.4274531 G4 z7 U% |- P- d: r iteration 9, loglik = -179.156352' o' |) M+ _, ~' R, l) q iteration 10, loglik = -171.744096; `% `8 S6 H' l4 k3 C( j 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 5 x7 B- U: U/ Q9 v prior4 = 0.0000 0.9982 0.0004 0.0014- f( v. O/ e$ b' z; { 0.0000 $ G5 Y! t: _# K, ^! @; Q; M3 p transmat4 = 0.0873 0.5277 0.2799 0.1007 0.0045 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. p: f+ r) R& Y/ }5 s- ~- T5 g6 ?* Y 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.00003 o2 ^2 x8 q, n- x 0.4120 0.1044 0.0049 0.1736 0.0032 0.3017 0.0001" d l% f3 J- g1 n) z/ A7 P6 L4 S8 G 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 $ W3 V" j8 \" k0 q data1 = 5 2 4 1 2 2 5 2 3 7 1 6 2 loglik = -19.2351 7 [( z* u! F: K" l3 l loglik2 = -21.0715 path = 3 2 5 3 2 1 3 2 1 5 3 2 1 9 M" s% w: g3 [' e$ |2 X7 j4 P 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 |