% ①定义一个HMM并训练这个HMM。& Y0 w( l9 q6 m' S! y % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。8 Q5 n: g) ] i % 修改:旺齐齐 % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O:观察状态数 O = 7;- k/ P. C" i% L$ { O2 = 7; % Q:HMM状态数5 [3 q( n4 c6 ]+ C! _, A6 g, p$ J Q = 5; Q2 = 5;0 r5 s' N3 u* { %训练的数据集,每一行数据就是一组训练的观察值8 r% h1 _. v6 L9 w9 B$ x data=[1,2,3,1,2,2,4,2,3,1,2,7,2;* N( P( k! \" {8 p; m3 ~2 o& W4 ^ 1,2,3,6,2,2,1,4,3,1,5,3,1;; y& U$ C7 j8 Q! U/ D$ n- n1 {/ @. j 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;1 p; {+ m N6 [" \& r1 b4 [ 5,2,3,3,5,2,1,2,3,1,2,3,6;8 [- Q+ R) z8 Q C 1,2,3,1,2,2,1,6,5,1,2,6,4; J' b0 G) {/ g0 }" _ 5,2,3,4,4,2,1,2,3,1,2,5,6;3 l- U( n% e& \9 m) 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;* t X2 r# p( L 5,2,3,5,2,2,1,2,3,1,2,3,4;- g0 i) q D% b3 r: A 5,2,4,1,2,2,5,2,3,7,1,6,2;] 0 |, w! f2 q0 |0 a! ]0 u- [ data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;- W# G/ g$ r$ m 1,2,3,6,2,2,1,4,3,1,5,3,1;+ t6 X. p( Q. _8 y5 ^$ z+ a 1,2,3,1,2,5,1,2,4,1,2,3,2;- z4 [7 P7 S6 T$ k; N* y& f 1,2,7,1,2,2,1,2,5,1,2,4,1;" V3 z; D6 K; |* i1 W5 M 5,2,3,3,5,2,1,2,3,1,2,3,6; f+ m) Z* j1 X3 n8 V 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;# Z5 ?+ }0 N) X5 R5 G h6 ?7 ` 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;! a5 l! z M6 k, B9 ]$ n0 @& B* b 5,2,3,5,2,2,1,2,3,1,2,3,4;8 I( ?; h0 }, z/ p* G7 i$ m 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));4 q! y) W1 s- }# g$ N7 ~. a* P; D+ P 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( ?) @* d+ |9 W$ G6 o V1 P e; n1 q % 用data数据集训练参数矩阵形成新的HMM模型! T2 s# @0 o$ B( P! Y [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));9 D# V8 M' Y j% t % 训练后那行观察值与HMM匹配度5 W: }# {# [& R/ { LL& f1 ~1 g4 {1 _ % 训练后的初始概率分布 prior2 % 训练后的状态转移概率矩阵/ R0 z0 l! t7 y4 i transmat25 {# g+ w/ l5 c3 g5 d* } ]- j' ~ % 观察值概率矩阵, K; `& ]% Q1 \ r. d: F obsmat2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 ]# b" _7 Y8 g/ e % 添加部分& t4 @7 [5 j& A, y [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));& I! C* M- \, B' e- M LL2 prior4: y" T6 Q$ Y- L7 F6 L8 | transmat4 obsmat4* z; q4 U$ a3 D %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % use model to compute log likelihood8 r9 y1 i8 K* F8 L2 r % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]& M# u' [! t$ a" P( C/ Z8 C data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2] loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)$ w6 v! j6 P7 ?; }5 s; P; e % log lik is slightly different than LL(end), since it is computed after the final M step) Y" D6 `4 `1 I6 b2 s5 j/ _ % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。 % path为viterbi算法的结果,即最大概率path %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分" @( y9 U8 _" `: o loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7 f* m7 A) E3 J- o- f( V B = multinomial_prob(data1,obsmat2);& Y+ j$ Z# L0 d7 H4 d+ q( { path = viterbi_path(prior2, transmat2, B) save('sa.mat'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" ^* q6 j0 ~* d( I: H" B+ w % 添加部分- }* A4 Y; s% R- T$ f5 p B2 = multinomial_prob(data1,obsmat4); path2 = viterbi_path(prior4, transmat4, B2)& @8 K% f0 i2 t) U( I2 B5 C0 Z save('sa2.mat');7 d# e* N/ Q2 p1 e if loglik2 > loglik fuhe = 2 else fuhe = 1 l8 ?& {$ q; z, C3 u6 }+ p& B, t end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ------ 运行结果 ------ data = 1 2 3 1 2 2 4 2 3 1 2 7 28 f6 C [1 a# G5 _ 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. H. w% e% D3 [1 ?+ I& B 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( O( }' J7 u9 I2 H: I& I# O9 o3 E 1 2 3 1 2 2 1 6 5 1 2 6 4: v Z" L% e }' M y y. S/ J0 ? 5 2 3 4 4 2 1 2 3 1 2 5 6! {, c, M; ^* k6 }, V 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 9 ?6 }/ l* E" V' a4 p data2 = 1 2 3 1 2 2 4 2 3 1 2 7 2# _( E K0 _$ V# R" ]& E/ j& g1 | 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 U5 f6 }- C% E6 c1 a: P3 V- E& L7 l 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! ?5 A0 w- C; P" ]4 l' ?1 M$ S 1 2 3 4 2 7 1 4 3 1 7 3 32 I I+ {, X2 M+ @" t 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% {- G8 ]" F( t2 r% O iteration 2, loglik = -238.259812" L% c2 Q* c1 s* F) @. S iteration 3, loglik = -232.962948 iteration 4, loglik = -223.3238918 g8 k& A$ i$ l+ m# z* f iteration 5, loglik = -207.630875 iteration 6, loglik = -191.012697 iteration 7, loglik = -178.611546, Y) {- r& k, C( h iteration 8, loglik = -171.524132 iteration 9, loglik = -168.626526! J5 U6 Z# [" c% s- ^/ e0 Z4 E 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 0.0000$ C+ j0 {' ]% c4 I 1.0000/ @9 X/ s# i- k# f 0.00004 ?7 I( y& O! D 0.0000 $ L# ^5 \, t) s transmat2 = 0.0138 0.0089 0.7680 0.1060 0.10334 L% V) G ~% t# E: i; x4 p 0.7811 0.0000 0.0199 0.0067 0.1923 0.0000 0.9936 0.0000 0.0064 0.00006 k/ z+ d9 t0 J! j* F' o7 e+ [+ R 0.1686 0.2604 0.2242 0.3398 0.0070" t/ x3 s: U+ g' @ 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.02285 [9 m! Z2 E9 F* R6 a& ~ 0.7514 0.0021 0.0011 0.0550 0.1472 0.0432 0.00005 X5 D `5 b& u0 J1 b0 v* [ 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 iteration 2, loglik = -242.163247/ d C* z, J: m8 d/ I4 T0 c iteration 3, loglik = -238.321971 [/ r% G/ m- W& w# n iteration 4, loglik = -233.166746 iteration 5, loglik = -225.682259 iteration 6, loglik = -214.560296 iteration 7, loglik = -201.182015 iteration 8, loglik = -189.427453- Q3 w5 c) p' ?$ l) u# q iteration 9, loglik = -179.156352- `* e' A' ?9 f8 R; l) g: C& _ 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.0000& b# U1 P1 ]. j. ]# a0 m5 y( t 0.9982$ t! a4 k& S4 K 0.0004$ j4 H% x$ k0 l& o9 E! d 0.0014 0.0000 transmat4 = 0.0873 0.5277 0.2799 0.1007 0.0045 m3 [* S" c" D) d' x: K: E 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% @$ t$ D$ h5 G1 v 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 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 ; Z& T' }! j% E3 s2 X data1 = 5 2 4 1 2 2 5 2 3 7 1 6 2 ) a) D& S1 [8 M# o$ ~ loglik = -19.2351 loglik2 = -21.0715 path = 3 2 5 3 2 1 3 2 1 5 3 2 1 $ `8 g8 R$ w% j: t% x8 } path2 = 2 5 1 2 5 1 2 5 1 1 2 5 1 7 u- U) G8 m5 j9 ?1 R4 n fuhe = 1 |
399.79 KB, 下载次数: 0, 下载积分: 体力 -2 点
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |