% ①定义一个HMM并训练这个HMM。+ [* P2 ~/ h: v, ^) X i# G- H % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。 % 修改:旺齐齐% ^! z/ l& t4 O7 l % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % O:观察状态数- W, I$ t- p; a' I) A( S. U. [ O = 7; O2 = 7; % Q:HMM状态数 Q = 5; Q2 = 5;0 r3 I2 H6 a8 G/ i- N) U( M %训练的数据集,每一行数据就是一组训练的观察值4 C" y7 \+ y1 i I. y6 z) X3 o; u$ n$ K 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;9 y+ S. B; g, n( y. C/ o1 R- M& W! v 1,2,7,1,2,2,1,2,5,1,2,4,1;! y8 j/ [- |- u/ r8 N 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 v. e i% T' r9 ~. S. @ r( A- }! f 1,2,6,1,2,2,1,2,3,1,4,3,2;/ x$ z; N* H! _% n" S 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;] data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;% J" J. d) c/ w5 f7 A) E 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;2 [' c9 b* ~+ X8 F 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;5 {* K% {) K7 F" }0 l3 ` 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;# |% R+ ]2 m& f: K* r2 i9 k1 y q 4,2,5,1,2,2,6,2,3,7,1,6,4;] % initial guess of parameters" X- X+ f# Y# \' r1 l& g2 y % 初始化参数8 M' Y. E- {7 r prior1 = normalise(rand(Q,1));/ d5 i* P: b+ ?* {. a# R transmat1 = mk_stochastic(rand(Q,Q));6 j& |+ i2 R/ O; a, k# ] obsmat1 = mk_stochastic(rand(Q,O)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 z2 s7 M& t3 A$ |9 f7 g: L % 添加部分4 N2 W- {. R# `( |0 e% l0 I5 O prior3 = normalise(rand(Q2,1)); transmat3 = mk_stochastic(rand(Q2,Q2));% _2 [8 A8 u% G3 y7 h$ S/ G& D obsmat3 = mk_stochastic(rand(Q2,O2)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % improve guess of parameters using EM % 用data数据集训练参数矩阵形成新的HMM模型; U9 j9 v# u6 o6 `! b; Z [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1)); % 训练后那行观察值与HMM匹配度/ @, V- V \# T l7 d. m2 p( P LL % 训练后的初始概率分布 prior2 % 训练后的状态转移概率矩阵 transmat2" ~. V* g# ^0 b( F7 r) L % 观察值概率矩阵 obsmat2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分; {8 _/ b3 H7 i. w9 n) \ [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1)); LL22 h( G+ H1 t) U U! [ prior4$ ]. P; I1 U( d( i transmat4. i) @6 A/ |# ? obsmat4 K6 {7 z1 w* j %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % use model to compute log likelihood u1 z7 Z( w0 L* C % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]1 G8 w& F% y) q; o" @ data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]9 J3 M8 W/ l; ? loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)8 D& j/ m, n. h: p0 N0 { % log lik is slightly different than LL(end), since it is computed after the final M step4 q! n# a* y# R# B( w1 @2 a % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。 % path为viterbi算法的结果,即最大概率path %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%- L$ y, M) v3 c0 r" j, n % 添加部分 loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% B = multinomial_prob(data1,obsmat2); path = viterbi_path(prior2, transmat2, B) save('sa.mat'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 添加部分$ \* a9 @8 L; N% Z) ~* ? B2 = multinomial_prob(data1,obsmat4); path2 = viterbi_path(prior4, transmat4, B2); u8 ~ s( A7 z1 q4 } save('sa2.mat'); if loglik2 > loglik `4 g9 n, y7 u. m3 q fuhe = 25 V8 ~! ^1 ]; r) {0 ?+ G( W else2 x7 H! Z+ `. a/ p$ K3 t fuhe = 1 end 9 _$ }& U) R4 P: g& {9 k0 ~ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ------ 运行结果 ------ 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 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/ Q. c" d! {. g, @! {" K6 M: e/ C+ E, ] 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 34 Z3 |. N! s( _2 J4 I! H 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' H4 d( P6 h: X7 R 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, r1 X, s/ o, Y1 C7 K. C 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 g; h3 g& ^1 x' p 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 31 A" e; A2 i- l4 b* p: g9 V- E 5 2 3 5 2 2 1 2 3 1 2 3 4$ J6 Q/ D4 B/ K5 ~" q 4 2 5 1 2 2 6 2 3 7 1 6 4 iteration 1, loglik = -327.100465 iteration 2, loglik = -238.259812 iteration 3, loglik = -232.962948 iteration 4, loglik = -223.323891 iteration 5, loglik = -207.630875% J7 m& {" v7 z: H% Q iteration 6, loglik = -191.012697# b7 O9 x# Z' Z/ E iteration 7, loglik = -178.611546( C8 E1 e+ A$ I8 e& V$ U iteration 8, loglik = -171.5241324 U0 p/ O/ l! ]3 f* z) c iteration 9, loglik = -168.626526! K8 i: j* H7 }. y, R iteration 10, loglik = -167.387057& L2 w/ i" |! C% \ 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.00002 l* r6 t, [+ p, G 0.0000 T1 S6 }3 m" f; W& w/ x4 i 1.0000 0.0000 0.0000 2 O( p. i+ l* K0 M transmat2 = 0.0138 0.0089 0.7680 0.1060 0.10332 L; a3 N6 X+ i6 l 0.7811 0.0000 0.0199 0.0067 0.1923; W+ t7 u" s7 f% F4 R! V 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 3 r0 F' L4 r3 l5 y obsmat2 = 0.0000 0.2351 0.5738 0.0256 0.1118 0.0186 0.03510 s" W1 _1 m3 F+ H! u1 \3 Q 0.0000 0.8270 0.0000 0.0790 0.0256 0.0456 0.0228 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 iteration 2, loglik = -242.163247. m9 k$ G/ S! O8 Z iteration 3, loglik = -238.321971 iteration 4, loglik = -233.166746. E6 x: C; \- ~' \ iteration 5, loglik = -225.682259 iteration 6, loglik = -214.5602969 H* a% V. b7 ?* q" z0 A iteration 7, loglik = -201.182015 iteration 8, loglik = -189.427453 iteration 9, loglik = -179.156352 iteration 10, loglik = -171.744096" j& `# g* j$ q: ] _! W( K 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! K; M# i l/ N+ o3 j( Z% T$ D 0.9982$ C& q5 e2 W! X. Y6 H 0.0004; n5 t$ { W) `, }* L 0.00142 `- ~6 ]7 C9 P5 H% B! i 0.0000 transmat4 = 0.0873 0.5277 0.2799 0.1007 0.00456 i4 m, O) ?* i 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: K1 @* s- U1 D6 O1 Q 0.9746 0.0056 0.0003 0.0195 0.0000 obsmat4 = 0.0000 0.2012 0.5080 0.0580 0.1093 0.0465 0.07708 {* ~: d8 U8 @% | @% i# t( e 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" R4 J' w: l, x 0.4527 0.0622 0.0637 0.2568 0.0549 0.0295 0.0802; o* s& O# D% {2 p8 b 0.0000 0.8172 0.0000 0.0943 0.0270 0.0389 0.0225 : a& V5 {8 Z# {: M data1 = 5 2 4 1 2 2 5 2 3 7 1 6 2 , X8 F8 R1 Q! X7 v/ k# |% v- Q# D loglik = -19.2351 ' k* w9 {. Q, W0 u4 c 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 ' p+ l4 c- U' e Z% E- ? t9 w fuhe = 1 |
399.79 KB, 下载次数: 0, 下载积分: 体力 -2 点
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |