QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1752|回复: 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
    8 Y% k2 x7 o6 @# K) v/ x, ^1 r
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱3 P& i1 n1 u$ `& _2 i9 y7 P5 g
    % ①定义一个HMM并训练这个HMM。
    2 V7 ~' J9 [' _: Y% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。, {  I9 G* m. }: U8 v9 |: j8 h
    % 修改:旺齐齐
    0 x0 f4 R) V2 g) o% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。1 l9 ~1 V  v9 t! D2 z5 A
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数+ K. H. L0 a0 ?0 f  |& e
    O = 7;7 X$ k) S: y2 N& G9 ~
    O2 = 7;
    / \7 h+ ?. l, n% Q:HMM状态数/ Q, s; `  G9 [) B. x9 Y. M" U+ p6 a
    Q = 5;
    * j1 M" I6 E: {$ P- P; z( W' GQ2 = 5;
    " l4 |  R; W- }. W( E%训练的数据集,每一行数据就是一组训练的观察值
    ' M* K' W+ \7 b  X( l- V+ x, r9 t/ Wdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;' l3 E) |$ ?7 v: y
          1,2,3,6,2,2,1,4,3,1,5,3,1;% x+ }3 l7 u; V, u/ q, W
          1,2,3,1,2,5,1,2,4,1,2,3,2;! E! }4 t8 K- }# a8 k; N$ m; m
          1,2,7,1,2,2,1,2,5,1,2,4,1;4 ]) f3 [6 H# b' u
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    + s9 o1 z: r9 J      1,2,3,1,2,2,1,6,5,1,2,6,4;
    $ d1 K  U0 i# {# s! _* c) g- c      5,2,3,4,4,2,1,2,3,1,2,5,6;
    # m' g( @9 @2 u! _      1,2,6,1,2,2,1,2,3,1,4,3,2;1 |1 ^' ~9 a7 N+ X$ V" z4 g% s
          1,2,3,4,2,7,1,4,3,1,7,3,3;7 K$ _4 b6 U8 `  {3 A' j
          5,2,3,5,2,2,1,2,3,1,2,3,4;4 {4 R% z$ q# S5 \. X9 Y
          5,2,4,1,2,2,5,2,3,7,1,6,2;]
    * F# ^7 a' G3 D8 S. r. E) X1 c7 [) R: o
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    5 K, E- `) z4 B6 m# R! v5 i# B          1,2,3,6,2,2,1,4,3,1,5,3,1;
    % g5 W. |; a  b: z          1,2,3,1,2,5,1,2,4,1,2,3,2;! m9 e  j* M- d* i; m, x" z- D
              1,2,7,1,2,2,1,2,5,1,2,4,1;  I+ s- b; C  C% c+ q0 Y& W+ |
              5,2,3,3,5,2,1,2,3,1,2,3,6;2 x3 @. h9 z4 [2 w7 O$ i' _
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    - v% C8 p& g* h! ]  e' [          5,2,3,4,4,2,1,2,3,1,2,5,6;8 d# {) ?3 D% o3 r  W" A8 ?3 n. R
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    , a6 S' R+ S9 ?/ L& Y          1,2,3,4,2,7,1,4,3,1,7,3,3;
    $ x5 S; L$ x9 F9 \- N% g' E. q8 f& ~          5,2,3,5,2,2,1,2,3,1,2,3,4;  [, _, A+ C& U- B" l
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    # e3 V" ^0 V+ {; O# S) A% 初始化参数
      p0 j  e5 u' I  Xprior1 = normalise(rand(Q,1));: f/ n9 c$ V8 a& m$ A
    transmat1 = mk_stochastic(rand(Q,Q));6 j1 M6 T; d/ a9 _: L( t" u* D
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%* o1 V" A: O8 t/ S  `) K# ^
    % 添加部分* F# U; }- o; d; p1 q. ?4 l, _9 H
        prior3 = normalise(rand(Q2,1));
    3 q4 |4 \# m  P) L9 H1 l4 c; ]    transmat3 = mk_stochastic(rand(Q2,Q2));
    4 |0 l+ ^$ ^7 a( j4 d. W% O$ d    obsmat3 = mk_stochastic(rand(Q2,O2));4 z% s4 k% j+ c$ b, s. M, ~& E
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    $ E2 J& w0 R( s6 w! ^- M% 用data数据集训练参数矩阵形成新的HMM模型4 P- e: \1 T- q' \% Q7 O* a+ j4 G
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    ! y" o) ?9 H) e  P9 g- x9 r3 L% 训练后那行观察值与HMM匹配度8 k) a, t  C% t  |$ P
    LL1 I$ P; s5 X; h! I7 W4 P( K5 o
    % 训练后的初始概率分布
    ! w  y  J4 m& I# fprior2
    + X% x! E4 V8 w4 E  S0 E% 训练后的状态转移概率矩阵
    * L  {# b0 A! |- K" Y! atransmat2
    ; a! {# D+ Y/ D) h1 G+ a/ }& y% 观察值概率矩阵
    5 Z% f; ^$ A5 g) g0 ]) R# E9 dobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 M) C+ a' n1 |
    % 添加部分5 e! Q( J4 ]9 Q
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));
    / m% {" b! @/ m5 U* b    LL26 e+ j1 L& \- E1 u) f, o$ z
        prior4
    ) w, r( Q8 @& w    transmat45 h, @+ A; [2 I0 w" |) {) S
        obsmat4
    / i- y! K3 ]4 E, c5 t2 D%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    6 D1 O+ Z! s- j8 x% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    9 j( q, T) G8 d; `6 l5 O# fdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]( w2 X& y. [: m( S: {
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)/ F) U. }+ b1 C( h$ f: h
    % log lik is slightly different than LL(end), since it is computed after the final M step
    3 M' u4 |4 d& \8 E3 O% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7 S0 W; K! E5 E7 Y( O" |7 f
    % 添加部分
    9 c9 @/ B( [# W7 N+ ploglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)8 h2 q, Z- w+ \$ N% P
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    6 z& Y# K" ^7 R3 `4 ]7 |B = multinomial_prob(data1,obsmat2);+ n  m5 r2 H4 m8 |% ~
    path = viterbi_path(prior2, transmat2, B)+ E9 z0 C6 V/ Y, ~) Z
    save('sa.mat');

    - |$ U% h( e1 t4 N$ l%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%9 D9 N4 S/ y5 Q9 O5 ?0 X8 p* w
    % 添加部分2 E/ Z* f: |4 M$ A
        B2 = multinomial_prob(data1,obsmat4);
    6 U& h3 Q& @5 Z7 X' m    path2 = viterbi_path(prior4, transmat4, B2)
    ( H& c$ v" _# a8 f/ E: @) M, c3 V( ?    save('sa2.mat');3 o8 s  m2 W1 s! a5 b  y( K, C' G
        if loglik2 > loglik
    # }. x$ e4 ?, E' w6 J        fuhe = 2
    * Y' A3 b  K& ]  J& [" m  c* N    else
    ; Q. X1 E) R& }& e9 @        fuhe = 1' R3 j) m! e$ ^
        end   
    0 Z% S' d2 _. m" H+ R  w4 v%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ; x2 E3 c, m. h     1     2     3     6     2     2     1     4     3     1     5     3     1
    5 E$ K6 s- A! F( r2 X, E4 G5 \8 ?     1     2     3     1     2     5     1     2     4     1     2     3     2# F, }1 F2 @( [/ Q! p3 J5 l
         1     2     7     1     2     2     1     2     5     1     2     4     15 E3 c* o4 O6 d0 G8 e# b
         5     2     3     3     5     2     1     2     3     1     2     3     6
    3 L4 N( m7 V9 W7 @) G0 C     1     2     3     1     2     2     1     6     5     1     2     6     4
    , m. t. p5 r4 ^/ v( ]% J% n     5     2     3     4     4     2     1     2     3     1     2     5     6
    2 f8 U; M2 \3 I; U4 `1 ^     1     2     6     1     2     2     1     2     3     1     4     3     2
    . o, i2 G" L: Z7 W; v. D     1     2     3     4     2     7     1     4     3     1     7     3     3
    " W4 N2 P! d1 O, h  n3 t1 X     5     2     3     5     2     2     1     2     3     1     2     3     46 o" x6 h1 i* I- w8 b( k
         5     2     4     1     2     2     5     2     3     7     1     6     2

    % }8 Y3 {7 C% d- d0 u( \data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2; c' N- A5 ~- w& Y
         1     2     3     6     2     2     1     4     3     1     5     3     1) w! J; o- [/ e9 X/ \9 {
         1     2     3     1     2     5     1     2     4     1     2     3     2' ^" K/ Z( ?( A- M& v. D+ m
         1     2     7     1     2     2     1     2     5     1     2     4     1
    8 v2 r* g% B% ~8 Z& I+ D& k     5     2     3     3     5     2     1     2     3     1     2     3     6" G" n' Z7 ~! E
         1     2     3     1     2     2     1     6     5     1     2     6     4
    " h3 x2 p3 Y7 ]7 s3 q) X4 m     5     2     3     4     4     2     1     2     3     1     2     5     63 l5 e$ m8 \3 g! Q; v+ j9 a
         1     2     6     1     2     2     1     2     3     1     4     3     2
    8 L3 N- u  U; j4 P& G     1     2     3     4     2     7     1     4     3     1     7     3     3
    . }7 I$ V& ]( B& F6 `     5     2     3     5     2     2     1     2     3     1     2     3     4
    7 T# C3 h8 p7 U. ?- D' j1 O     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.1004655 W9 n" r+ t+ s& F. d/ r
    iteration 2, loglik = -238.259812+ R8 Q. d: z) g) [8 j
    iteration 3, loglik = -232.962948+ h  K5 L. I* }0 H5 \" ~' @( l
    iteration 4, loglik = -223.323891
    # e0 x7 N5 j. Y" r+ E5 Jiteration 5, loglik = -207.6308752 b0 c, u2 d5 f3 q1 i
    iteration 6, loglik = -191.012697
    + D. E% H! b; T) B% Viteration 7, loglik = -178.6115460 O$ i& M( W+ z
    iteration 8, loglik = -171.524132' D$ m) A9 o3 U! X9 L3 u
    iteration 9, loglik = -168.626526
    # k/ U# d8 v" W0 w* b5 Uiteration 10, loglik = -167.387057
    * ~3 ]) R6 n0 e# v/ z7 Diteration 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
    7 G& w& s# f% u
    prior2 =
        0.0000
    7 u: T* l2 M* b6 |    0.00006 b) |" M( n  w( V; s0 u
        1.0000( i2 l/ D' \2 @2 P
        0.0000# l" Q+ k6 b. v6 O5 D3 @# K
        0.0000

    * B! h* k0 ]) {8 G$ F: |transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    * E3 w! L, Q9 y8 d    0.7811    0.0000    0.0199    0.0067    0.1923
    . p8 c& x" n( }; [& q  s9 i! d' S    0.0000    0.9936    0.0000    0.0064    0.00000 E& m# D7 C" j9 N2 {9 o1 ?
        0.1686    0.2604    0.2242    0.3398    0.0070
    , c# N/ u7 y$ V( M    0.0053    0.0406    0.8350    0.1184    0.0007

    + V$ J1 J% {6 `; n8 ^. y( {# k) Vobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.03518 J2 Z5 I3 u8 Y7 M: `
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228, @* @' k( [# f; B) M- r/ _
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    , k+ [. U. P4 ]$ Q- b    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055* n9 e+ G5 {8 s% z
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
      y7 u4 e2 `/ a6 \& G* U6 yiteration 2, loglik = -242.163247
    4 l' J( ^& u( s* ]. j  a" niteration 3, loglik = -238.321971" P! q8 y2 n; s9 ~5 R: W
    iteration 4, loglik = -233.166746
    ; M4 F& H6 G) g! b2 `! ^iteration 5, loglik = -225.682259
    1 t" U3 n) P3 ^( ]  e7 }* Riteration 6, loglik = -214.560296
    6 E0 w5 k, e, G& s; K& d/ @iteration 7, loglik = -201.182015% \! e- T9 f6 l+ ]; e6 a1 @# i
    iteration 8, loglik = -189.427453) C# R# K! P7 \9 e
    iteration 9, loglik = -179.156352
    ' j7 N/ V& \0 t4 ?3 F* g( \iteration 10, loglik = -171.744096
    + t: m: v+ y2 D, k% l5 _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

    1 S5 Q' K9 H8 G3 i* Vprior4 =
        0.00007 H. s- \: ^1 o% O+ H
        0.99828 W2 \; [/ q8 A  g8 G9 ]; Q9 g$ ^( L
        0.0004
    : d& Z4 K% T* I- y+ }    0.0014
    - w2 J0 K0 K5 z+ b4 E3 g    0.0000
    ) Q( d: j# K( K2 w/ X
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045: t( ?' L# u9 p7 g
        0.0002    0.0000    0.0005    0.0000    0.9994, k2 o9 I. c; ~" z6 s) y9 ~3 q
        0.0180    0.0000    0.0118    0.0011    0.9692
    7 f9 V* E* ?8 o7 N& o    0.0436    0.0226    0.0810    0.0219    0.8310
    ) E  R2 c2 W2 d. X; R( k) x( V    0.9746    0.0056    0.0003    0.0195    0.0000

    ; b- h' o: k& J9 J- [  E; Nobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770  {7 x' U' E# i9 ]
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000* L( i9 n' M+ J7 d4 j7 `3 o% ?
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001- b/ O( Z" r: v8 K, |! p" N/ c6 b4 a
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    ( P& o  c6 d6 n; K) j8 ]    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    # Y* y" z& _& T3 o3 ?3 y" J6 fdata1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    9 q& w3 m8 }- H* p# @
    loglik =
      -19.2351
    & o( s0 g5 x/ u; G
    loglik2 =
      -21.0715
    ( k3 y3 ]0 T4 }* r/ T$ W; p3 _
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    + `' P/ D* |0 L( K6 T7 S" z7 J- epath2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    ' R. s9 j( F, d: ?" Q: k( B% G
    fuhe =
         1
    - z6 _7 x4 R2 R( T' @( y5 O
      S; G0 `' {: d# {4 G
    1 p+ h: X% w$ h& b

    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-6-9 20:30 , Processed in 0.474926 second(s), 55 queries .

    回顶部