QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1726|回复: 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
    " I4 Z5 @; `; e1 [7 G- I2 L
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱1 p7 \, i, M# s/ B
    % ①定义一个HMM并训练这个HMM。3 y; G+ u4 Z" D4 e+ B
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。5 D! W& u: d0 }0 L( x2 y, f
    % 修改:旺齐齐, J5 T0 ^  a& ]0 t7 P; _# a
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。
    * E' D8 y* e" c1 Q. @9 r, p1 M%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数9 @% |+ S" L. |9 O: |
    O = 7;6 K9 l3 m% t  B7 a. W$ d
    O2 = 7;8 D, E' v) _3 f7 E6 K) J
    % Q:HMM状态数8 S! d$ w. A2 S1 w
    Q = 5;
    1 z, V- _7 S$ t# F: W, x/ NQ2 = 5;
    9 p' H4 y) u8 W8 B  ?. V" ~%训练的数据集,每一行数据就是一组训练的观察值
    ; F3 W% |0 Z; X; f6 a% Vdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    7 Z/ f7 Z0 U8 J# c* G: Z      1,2,3,6,2,2,1,4,3,1,5,3,1;
    % @9 w$ l3 H! L8 f% t      1,2,3,1,2,5,1,2,4,1,2,3,2;  R# X( w) }# r
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    0 z# a2 N: W; P- g      5,2,3,3,5,2,1,2,3,1,2,3,6;
    ; D4 c+ X! g6 M7 e$ V      1,2,3,1,2,2,1,6,5,1,2,6,4;5 f, Z3 Q' _$ ~% H: b+ M5 P
          5,2,3,4,4,2,1,2,3,1,2,5,6;$ Q! f, O! ?, J; L- z- K9 G
          1,2,6,1,2,2,1,2,3,1,4,3,2;
    7 D% }  F$ q/ K3 m/ U$ }      1,2,3,4,2,7,1,4,3,1,7,3,3;
    . L1 M% h7 Y9 \0 q0 ?* J: E      5,2,3,5,2,2,1,2,3,1,2,3,4;8 J+ h5 k; E5 C1 C  S
          5,2,4,1,2,2,5,2,3,7,1,6,2;]
    4 h9 t- _/ Q9 j  h1 Y
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;2 e7 |3 A! @0 W& M3 [
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    2 a+ [& C. p9 ~: _) k& w5 T6 U4 _          1,2,3,1,2,5,1,2,4,1,2,3,2;2 m# m3 y' a4 i6 h
              1,2,7,1,2,2,1,2,5,1,2,4,1;
    * A9 g, l, J% X- [3 K          5,2,3,3,5,2,1,2,3,1,2,3,6;( ~& R, u& Y2 B
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    . g% H- }" [( E/ t6 [          5,2,3,4,4,2,1,2,3,1,2,5,6;
    7 J3 @9 A) L" B1 m          1,2,6,1,2,2,1,2,3,1,4,3,2;
    ! B# |+ b6 I7 A6 r          1,2,3,4,2,7,1,4,3,1,7,3,3;8 |0 I4 e. x5 F( I) ^
              5,2,3,5,2,2,1,2,3,1,2,3,4;( z5 q* Y# j4 U* R
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters+ K2 ]+ b" b: {
    % 初始化参数; U/ K' X8 r1 T& {: y: Y5 X0 N: }- d9 g
    prior1 = normalise(rand(Q,1));
    ; i* S# T9 a3 \, ptransmat1 = mk_stochastic(rand(Q,Q));
    8 @) q" C* h, ?( s2 Dobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    # r6 f& g) _) V0 K" r- z% 添加部分2 X! j9 M+ P5 w0 {' a
        prior3 = normalise(rand(Q2,1));
    0 i% u5 ]  K" v+ ?5 c6 d0 c; T* B    transmat3 = mk_stochastic(rand(Q2,Q2));
    , W" t, M# ^6 Y( N$ w- E+ h    obsmat3 = mk_stochastic(rand(Q2,O2));
    6 ~5 L5 f; i- j4 M( |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    ( A4 Y% k/ F5 j$ A' S% 用data数据集训练参数矩阵形成新的HMM模型$ d4 j* j. w6 r
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));( B1 k& y  R3 f) J. ^$ t
    % 训练后那行观察值与HMM匹配度' O2 u9 q, S% B, s9 Z5 b' c3 D
    LL: H! g: y5 p  r$ i/ c
    % 训练后的初始概率分布* P% {( m: p% x' C+ L( N. p
    prior2
    ; {) D/ e# k4 R  A% 训练后的状态转移概率矩阵
    - m/ g5 [# `8 a. H3 n& Dtransmat2
    6 o- j4 N  v/ X) I% 观察值概率矩阵4 E$ k2 m* G2 U1 W6 f/ W4 ?2 [! l
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ~8 A9 K$ |# H8 o0 O$ \; f( q
    % 添加部分
    0 k5 m" t2 y7 M9 K* K/ q, c    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    , ~0 c) z( |& L" B6 k& W$ j    LL2# @0 O8 C! V' i1 [( f
        prior4
    0 N& f/ A; H9 D8 q& |: J$ l& F/ y7 s    transmat4
    1 Y# [9 ]+ C# M: u* |- G    obsmat4
    : k. U- P: K4 h* \%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood+ J& \* i( `( N$ |8 u: F% J
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]) _3 y. V/ Y% m3 Z, O* a. ~* O
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]& P3 _. A6 }- \8 p
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2), @# ]1 h8 ]/ D1 C6 K$ ~3 T! t
    % log lik is slightly different than LL(end), since it is computed after the final M step+ x, h) o' i! c4 ?
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%- V: ]  D1 b7 V4 P+ i$ F
    % 添加部分& p) }( w& W; F' v" W$ k
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)- E- j2 P2 ?" k9 ~  J& u
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    : z7 X0 k" h( G( i# z, Q$ [B = multinomial_prob(data1,obsmat2);5 @: w' c6 w/ R: Q, O
    path = viterbi_path(prior2, transmat2, B)  u, i% P  D" h7 ?4 m( N6 t8 B
    save('sa.mat');
    2 \; M& M+ l( R) A: X; _
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 C. s0 O4 \: x+ e/ x! p6 T% 添加部分
    , X/ g7 k) z  I  ^! S* }0 n    B2 = multinomial_prob(data1,obsmat4);$ g" W+ O" Y. d' {. T
        path2 = viterbi_path(prior4, transmat4, B2)
    . K8 e, g& k- V2 o/ \    save('sa2.mat');
    & l, d! |( I3 s# N  g    if loglik2 > loglik
    3 R9 _9 A" T) b        fuhe = 24 u# B: ~, ~5 s" L. j
        else9 u5 d" C! I7 E1 \% j% A: I
            fuhe = 1
    ! c& {8 ?6 s6 i. L- ?+ r1 g1 `    end   
    3 N" E% m0 g: B+ B1 c%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    * Y" _! k+ U! u. A5 G     1     2     3     6     2     2     1     4     3     1     5     3     1) T4 V& F4 \) S
         1     2     3     1     2     5     1     2     4     1     2     3     2! M* s* H7 K; D# d7 [- T/ ]! A; V
         1     2     7     1     2     2     1     2     5     1     2     4     18 R7 F8 D0 r6 U* H: G" _
         5     2     3     3     5     2     1     2     3     1     2     3     6
    * g6 q! v' @8 a( b     1     2     3     1     2     2     1     6     5     1     2     6     45 ~* {7 N% ?' ]: F
         5     2     3     4     4     2     1     2     3     1     2     5     69 W, I9 k8 c8 _( m
         1     2     6     1     2     2     1     2     3     1     4     3     2- E+ q+ {1 E% P  z% E5 D/ |
         1     2     3     4     2     7     1     4     3     1     7     3     3, }$ `3 n$ I" J, t
         5     2     3     5     2     2     1     2     3     1     2     3     4
    7 p& V6 f- {* v. q& ?     5     2     4     1     2     2     5     2     3     7     1     6     2
    $ T) u3 I% d% @* ]: V1 \- a
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2% S2 X2 f& ?/ _" K- |5 ?- b
         1     2     3     6     2     2     1     4     3     1     5     3     10 g- t* r, `, B+ e0 q, s) b: [
         1     2     3     1     2     5     1     2     4     1     2     3     2
    9 S$ l' z$ k+ T9 q$ t     1     2     7     1     2     2     1     2     5     1     2     4     17 W& G& {  s" F' Y( c
         5     2     3     3     5     2     1     2     3     1     2     3     6
    7 w9 Y" O: o; l     1     2     3     1     2     2     1     6     5     1     2     6     4
    # n0 P7 d: H, _2 Y# H     5     2     3     4     4     2     1     2     3     1     2     5     64 p: q/ v0 O! R; M
         1     2     6     1     2     2     1     2     3     1     4     3     24 b8 h) N5 r! c/ m" i8 X/ b
         1     2     3     4     2     7     1     4     3     1     7     3     3
    - ~8 u0 F# V% D     5     2     3     5     2     2     1     2     3     1     2     3     4
    ! C& ]0 C( P9 F  A# _     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    7 @, [2 g+ q2 [* giteration 2, loglik = -238.259812
    / o$ Z& Y1 l; M8 O8 W# _$ kiteration 3, loglik = -232.962948
    3 u2 T) [1 q4 M& ]0 P5 ^9 Biteration 4, loglik = -223.323891' y9 v4 J# G" k6 |7 c# X* [
    iteration 5, loglik = -207.6308756 r9 g! x7 Z+ Q: Q2 G& g
    iteration 6, loglik = -191.012697
    $ h0 |9 ]! Y( H( \iteration 7, loglik = -178.6115468 x  G0 p; e% h& m* g
    iteration 8, loglik = -171.5241326 K2 L+ S: V% W0 O+ d! g& c* G% k
    iteration 9, loglik = -168.626526
    $ e" ~- |3 v2 e, ~4 x( g4 {1 fiteration 10, loglik = -167.387057
      ~9 ]& I# p4 Giteration 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

    9 z2 J9 w. W' y; D- R' iprior2 =
        0.0000
    : g, y5 d4 B2 j- R; D    0.00008 E7 k: h! e. t+ \
        1.0000
    4 O! H* N0 ]* {3 S# j) Z    0.0000
    ( l2 |$ ]1 @# ~5 X5 D5 b& W    0.0000

    , r( v3 f/ m: F0 C$ Htransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    & y& V1 O/ v4 R3 f4 u! L& R    0.7811    0.0000    0.0199    0.0067    0.1923
    5 `- l- I- s1 [4 N7 ~, Y- K9 v% J    0.0000    0.9936    0.0000    0.0064    0.0000
    1 w+ q7 Z1 t$ \! N    0.1686    0.2604    0.2242    0.3398    0.0070; n. u7 k# m& o+ A+ |# p
        0.0053    0.0406    0.8350    0.1184    0.0007
    7 V6 |( p' b% P1 k4 x* b& r; \
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    ' A  w( [7 d$ D+ U  g    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    3 U' e0 G+ l" O6 B  J% w3 [8 H6 D( h' w    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    - n6 Q7 c! L% D3 H5 z    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055  |. z% h8 e& S) S' Q8 a% \
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670" I' F6 f& q* u. f& M6 g  j! F. k
    iteration 2, loglik = -242.163247
    ! H3 J! b& u' B( Xiteration 3, loglik = -238.3219713 H' M& ~9 Z5 h& {( W( `
    iteration 4, loglik = -233.166746
    ( r" |0 j' L' ?  eiteration 5, loglik = -225.682259; |( b3 q9 G2 S. v/ h% g
    iteration 6, loglik = -214.560296
    * z& o, D7 A$ B6 @iteration 7, loglik = -201.182015. C; g9 x$ G2 c& V3 f
    iteration 8, loglik = -189.427453
    ( d* x$ d' T% U# e+ Miteration 9, loglik = -179.156352
    0 Z7 ^# g) y- J9 viteration 10, loglik = -171.7440964 j3 m+ n. [% S4 {" M8 I
    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
    7 r4 ^+ P% @. t8 ^& {, _1 H. A: }
    prior4 =
        0.0000
    / p6 p0 J" ^* A8 \$ q    0.9982; ]6 O% |8 I( b* G1 M
        0.0004
    7 ]4 N0 ]# E$ b$ V8 X7 J    0.0014
    7 c6 Y, r  S* L/ F    0.0000
    ! A1 j9 {' k8 ~" k
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.00451 h. [, Z7 E+ i0 D9 F3 N, \
        0.0002    0.0000    0.0005    0.0000    0.9994
    / e7 K% q& O4 H( ^% G3 M! E' ]8 r6 H    0.0180    0.0000    0.0118    0.0011    0.9692- f  Y8 P# j' q0 K/ S7 L
        0.0436    0.0226    0.0810    0.0219    0.8310
    9 q6 j# a' g0 i( x4 Q7 f8 O    0.9746    0.0056    0.0003    0.0195    0.0000
    : h* Z  a; B) R
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    " k4 w0 I+ i: `# W- f    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000+ c- I5 [1 @; A
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001# e3 ]* C- u' g, T; p% g
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.08025 u6 Q2 t) n' @  J4 L, T
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    5 N2 c/ O8 H: w7 g/ Tdata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    & X7 k7 {4 q9 w8 {$ m+ k9 t/ R
    loglik =
      -19.2351

    ( e9 S& j* Q7 W4 I- E, A  gloglik2 =
      -21.0715
    . F- F+ ^3 H/ N( W- d% k: O" J4 ^
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    0 L  n" A8 u; ^1 P: C. A2 {1 rpath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    - W1 k, r- }; w  L. ~% e
    fuhe =
         1
    " g1 J" T- O& ]& ^! ~3 a

    % g. K% M* K6 }" X
    * o8 }% W" o' f6 K

    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-4-20 11:34 , Processed in 0.406915 second(s), 54 queries .

    回顶部