QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1811|回复: 0
打印 上一主题 下一主题

隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-5-9 17:36 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    , E4 o/ A, k. c7 N6 Z. L! u隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱; Q. r% m9 T& }7 Y8 h
    % ①定义一个HMM并训练这个HMM。
    ; Z3 N' z) q9 L3 W% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。8 r) C; P$ Q% d( r( D: o. o) p: X. P
    % 修改:旺齐齐
    6 i) e$ [/ r, L0 B7 X% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。* J6 s# h3 @- S, z! S1 v: ]- x
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数0 C# d, o' m; r7 l
    O = 7;+ ^7 x" A: B- Z' ]: o
    O2 = 7;7 X1 d& L- F! x
    % Q:HMM状态数
    . J) v- K; r" Z, e9 YQ = 5;) \. S1 s/ X5 Q1 ]9 r8 \' t
    Q2 = 5;& g3 w0 I! `- u% S, a6 t  v
    %训练的数据集,每一行数据就是一组训练的观察值
    8 ~0 L2 Q& p: E: ]6 Vdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
      g# g( G  y/ _0 E6 ]% Q0 t0 T! R      1,2,3,6,2,2,1,4,3,1,5,3,1;0 U6 W: R$ D4 {7 X
          1,2,3,1,2,5,1,2,4,1,2,3,2;& S9 ?5 g) L6 r/ q' S3 p. ~! |0 I( k
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    / n; M" w$ s; z4 L      5,2,3,3,5,2,1,2,3,1,2,3,6;
    & S7 c4 }  R* X0 T# M      1,2,3,1,2,2,1,6,5,1,2,6,4;
    2 ~9 q- r1 D: {) Q4 P      5,2,3,4,4,2,1,2,3,1,2,5,6;
    7 E9 e' z* k% t! _0 e% h      1,2,6,1,2,2,1,2,3,1,4,3,2;
    1 z1 ]$ _' F! n      1,2,3,4,2,7,1,4,3,1,7,3,3;
    $ N( X/ `( N5 I3 i      5,2,3,5,2,2,1,2,3,1,2,3,4;% c0 c! o+ G% ?
          5,2,4,1,2,2,5,2,3,7,1,6,2;]

    " F& x4 {) W# D6 R: a/ y  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    4 Z2 y# u6 e( @" r* F3 \6 M9 U) R          1,2,3,6,2,2,1,4,3,1,5,3,1;6 a8 q+ k* _( f2 @  K
              1,2,3,1,2,5,1,2,4,1,2,3,2;
    # h- z- n5 Z: V% T          1,2,7,1,2,2,1,2,5,1,2,4,1;' |2 I. f: n/ T8 i: {7 q8 n: V
              5,2,3,3,5,2,1,2,3,1,2,3,6;% W4 N# w- S# t" K
              1,2,3,1,2,2,1,6,5,1,2,6,4;9 p6 p+ j. f7 r
              5,2,3,4,4,2,1,2,3,1,2,5,6;( n% j0 u( ?9 G9 D! o) _: L, U
              1,2,6,1,2,2,1,2,3,1,4,3,2;( f+ A+ w3 ~& d8 Q) P/ M- ~. j8 L: `
              1,2,3,4,2,7,1,4,3,1,7,3,3;
    , s; h, G+ n) C/ t- f          5,2,3,5,2,2,1,2,3,1,2,3,4;; F3 S1 ]) n, {2 k' p+ m
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters/ M* {$ Y8 j% [, `
    % 初始化参数
    5 B2 l5 G; w  O8 J, j5 kprior1 = normalise(rand(Q,1));
    . C- t# R. z5 utransmat1 = mk_stochastic(rand(Q,Q));6 h" F/ F+ T- D, q( W9 ?1 q6 M
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    0 \, `% {( k$ T6 z" ]% 添加部分
    $ D2 y( U% D. ~- }) |    prior3 = normalise(rand(Q2,1));- U' u  M! K* W7 E
        transmat3 = mk_stochastic(rand(Q2,Q2));# ]" Y2 p7 C6 l' d" A* s
        obsmat3 = mk_stochastic(rand(Q2,O2));  C4 f8 n* x6 p# g0 |# R! T( S
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    1 d- F+ R- B  M1 {2 s% 用data数据集训练参数矩阵形成新的HMM模型
    3 b% u5 j# m0 g& M- i# L& o[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    ; O* P% ~( _# j2 k  D% 训练后那行观察值与HMM匹配度" }+ ^; R3 ^" v% B
    LL, }+ K' t+ \( H1 K9 h  _: u: u
    % 训练后的初始概率分布
    " N0 `: p* ^9 t3 _prior2$ b) r. S7 N2 G" ^9 X
    % 训练后的状态转移概率矩阵, k' v8 K8 A7 ?  C( {1 a
    transmat2" k: r. h" s0 [, q* K) m
    % 观察值概率矩阵
    4 R  m: @) l3 H* r: v; xobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%* s; K3 ^, z) `: o/ ]% v& G
    % 添加部分
    1 v- C( G8 A8 J6 m+ o3 q) F    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));% X+ m5 l5 `2 \. |1 ]
        LL2
    / w2 l# h6 j7 P    prior4
    : ^, H& e2 A6 o6 [+ u    transmat4
    1 F% n1 `: D, I    obsmat47 p/ x% r5 h1 D( O
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood$ `/ |" q, j) m2 P
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]* X, j, l+ W: [/ \7 a+ x' B8 T7 j
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    ! G8 L2 D# R' F, e, tloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    7 v& e7 |7 e  ^: v5 d% log lik is slightly different than LL(end), since it is computed after the final M step0 V1 j4 m+ Q& W- `
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 i- _% j5 ?6 \7 b
    % 添加部分
    " G& _8 C  ~0 Jloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    ) E- Y0 J: S" m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    6 C* q+ e& D7 K9 r( Q
    B = multinomial_prob(data1,obsmat2);
    1 `5 ]( T! |* S& Ipath = viterbi_path(prior2, transmat2, B)$ S( r4 q& u3 T
    save('sa.mat');
    # `6 \8 r' W# z& k- ?( q
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 X  \& b9 A& I. f8 l6 Y+ v/ f
    % 添加部分# T. ^" g( r- R1 W$ V+ u0 ?+ c
        B2 = multinomial_prob(data1,obsmat4);: ~2 ?& h0 G% I+ ^1 N3 ^& f
        path2 = viterbi_path(prior4, transmat4, B2)1 H0 W& l# ?; t+ P
        save('sa2.mat');  G2 ?$ k& |* H
        if loglik2 > loglik
    6 i6 L" `0 ]; l9 S: L        fuhe = 2
    2 \% }6 w. o7 Y8 q0 A; r1 ]    else
    5 f+ R. U: F+ O8 d        fuhe = 1  g8 `+ F$ L( l+ ~* C+ z( z
        end   
    5 n# V* k) G- I1 X) D1 \) P9 C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    , K& ?. M/ o! v; c     1     2     3     6     2     2     1     4     3     1     5     3     1& j8 _. s8 @% ?
         1     2     3     1     2     5     1     2     4     1     2     3     2* ]1 k* x- R4 }% B! D$ g' B
         1     2     7     1     2     2     1     2     5     1     2     4     15 I# ?& m; o/ O# {' T' ^$ g
         5     2     3     3     5     2     1     2     3     1     2     3     6% D+ I: \- _9 I& I3 X7 X  V: M! ~1 r  G
         1     2     3     1     2     2     1     6     5     1     2     6     4
    . J) k: _& Y+ A. C% U/ x     5     2     3     4     4     2     1     2     3     1     2     5     6/ F; l& g/ T& ]3 ^: ]3 I5 p
         1     2     6     1     2     2     1     2     3     1     4     3     23 A$ G0 d; O/ t2 y
         1     2     3     4     2     7     1     4     3     1     7     3     33 B7 {4 |4 @# h
         5     2     3     5     2     2     1     2     3     1     2     3     4+ X+ v& {8 C; t4 j9 d
         5     2     4     1     2     2     5     2     3     7     1     6     2

    : @, d1 [2 e( k' Rdata2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2+ @6 o( q% W9 w' h# a6 I/ Q
         1     2     3     6     2     2     1     4     3     1     5     3     1; `' E8 y9 Q- V
         1     2     3     1     2     5     1     2     4     1     2     3     22 a" ~! {' L2 X) ]4 o
         1     2     7     1     2     2     1     2     5     1     2     4     18 U8 c. `; v# g  c7 u5 \
         5     2     3     3     5     2     1     2     3     1     2     3     6
    . J- P/ e6 o. E3 @! p( K# a     1     2     3     1     2     2     1     6     5     1     2     6     4! l; O. Y# q2 O4 q$ G
         5     2     3     4     4     2     1     2     3     1     2     5     6
    % N( Y' }- S- |  @; s8 r     1     2     6     1     2     2     1     2     3     1     4     3     2
    1 c. ]! [2 {. ^9 D# ^4 C" X! ^1 m1 L     1     2     3     4     2     7     1     4     3     1     7     3     3! e9 m0 J! \+ E3 Q9 ?' s
         5     2     3     5     2     2     1     2     3     1     2     3     4# ~+ v- ]2 @8 J" l  w+ {# k8 h6 N
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.1004655 I. p, G  V0 W  t+ c0 N
    iteration 2, loglik = -238.259812
    4 V4 h% k; j3 K* f  R  `iteration 3, loglik = -232.962948; F" Q/ H  f3 t8 T
    iteration 4, loglik = -223.323891% L( }0 R, ~# I7 D5 Z! p
    iteration 5, loglik = -207.630875
    . X4 B8 \0 F6 Z6 R2 W+ M- K. Jiteration 6, loglik = -191.012697
    6 m1 c+ ^# @' h+ }* a9 xiteration 7, loglik = -178.611546
    . Z# i' g0 C5 g9 iiteration 8, loglik = -171.524132
    % E8 G6 y* g5 s3 @$ K" ziteration 9, loglik = -168.626526
    1 r4 y5 \3 v9 G9 Literation 10, loglik = -167.387057
    9 a8 `5 ~' F0 k' k) _+ z/ j% Jiteration 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

    ' i; s! N/ g$ O" e# Nprior2 =
        0.0000
    + e* b5 e2 k' G7 t7 y3 a: j5 j    0.0000
    ' k, M# a  H0 O# e+ j6 _    1.0000
    - x2 u0 s0 L; @; A& D    0.0000
    4 n5 ]$ m) _4 p/ @" q5 S    0.0000

    3 u: W. D( H' e6 `transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033: C- I7 p& E$ G+ F
        0.7811    0.0000    0.0199    0.0067    0.1923
    ( a' b/ K" t2 c0 R+ k) i    0.0000    0.9936    0.0000    0.0064    0.00000 E2 x. B0 \3 V$ q- h2 d
        0.1686    0.2604    0.2242    0.3398    0.0070
    * J8 |+ K9 Z0 u6 P. K+ m( w; v8 K    0.0053    0.0406    0.8350    0.1184    0.0007

    , Z5 ^) q# \( S6 h/ _obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351' H/ B: D+ \! y+ Z/ j4 e, d
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228  O4 y( m' v, D) A. y# s2 h
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    ; [- `. {6 D4 S6 i    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055! a) p) b; V+ D7 {6 |9 r7 `
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670) }- A# Q$ _; r2 v
    iteration 2, loglik = -242.1632474 s9 l. u- M( M/ c
    iteration 3, loglik = -238.321971( q( q4 k% Q" M; q# M5 W3 y
    iteration 4, loglik = -233.166746
    - a: u4 J0 L* _- |& ?iteration 5, loglik = -225.682259
    ' \8 a- H) n; e* ?) ~3 a, @iteration 6, loglik = -214.560296- z5 x5 e3 b* h9 j# Y
    iteration 7, loglik = -201.182015+ i) G( `6 l( r9 r( h/ T
    iteration 8, loglik = -189.427453$ X/ h( R% X5 P: c/ s: @6 c
    iteration 9, loglik = -179.1563522 P2 a6 T6 y% C* x1 h- X3 @( d* x9 _( q
    iteration 10, loglik = -171.744096  O. h8 D. }( ]/ v& ~
    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
    , o9 A  `0 U  _, }
    prior4 =
        0.0000+ J2 N5 z' K6 Y# B* V4 s, \5 \
        0.9982
    / U8 h1 ]( _  \    0.0004
    ! A0 B$ V3 B+ S8 h' r    0.0014
    ; f& I  v3 y1 Z    0.0000
    / {4 x9 [, ], h% F. \6 c9 C. e
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045& M9 E+ a; W% H
        0.0002    0.0000    0.0005    0.0000    0.99946 g! p3 J# `8 s! Y6 o0 P
        0.0180    0.0000    0.0118    0.0011    0.96924 R3 ^& p2 p5 L! M
        0.0436    0.0226    0.0810    0.0219    0.8310' P' P* b! T- C" @1 L3 Y8 H
        0.9746    0.0056    0.0003    0.0195    0.0000

    6 P7 k0 K% M4 j+ y0 }* O* ^obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770# z; @3 {! B" Z' t
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    9 v, p4 t- D1 q& d  v    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001! W1 i' p& B, d  m
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802( Y. _8 x+ N/ ^: }1 B+ n: N
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    # n1 b: G' r, i, B- y. c6 ]data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    ) R* n  Y2 N, z9 Q1 uloglik =
      -19.2351
    % j% s4 m( s0 x) ]) A
    loglik2 =
      -21.0715
    2 M" _, \/ L" y" h
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    $ Q' k' ~! Y, [. Wpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    9 z1 r' B4 x7 f) qfuhe =
         1
    ! f. v; h3 t! k5 y% A; q7 t7 c

    3 a1 V. s: D+ @& U  z+ F( `7 w2 B# C

    HMM工具箱.rar

    399.79 KB, 下载次数: 0, 下载积分: 体力 -2 点

    售价: 5 点体力  [记录]  [购买]

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-9-11 16:37 , Processed in 1.131078 second(s), 54 queries .

    回顶部