QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1785|回复: 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

    / w; K0 H# z1 _( x( K! [隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    * e! U+ c8 @: b3 s
    % ①定义一个HMM并训练这个HMM。* |7 s# r+ F. I. I  v, J+ M
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。. _" z1 O2 t; Q& R% a
    % 修改:旺齐齐; u4 p1 P. h$ V4 b! q) w: h
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。8 ]4 K: R  E) O  d1 z" c2 P% o
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    4 v+ o" F0 R* c* v2 a! zO = 7;
    * e8 K+ u0 d( K* V/ {/ uO2 = 7;" K7 t2 P$ {( U! P9 r
    % Q:HMM状态数
    % W; ?9 B, L2 {4 [" b% pQ = 5;
    3 E, x$ @7 t: i) F! m+ T$ k3 rQ2 = 5;6 c) Z# ]6 a  e. O. |
    %训练的数据集,每一行数据就是一组训练的观察值
    5 z% l0 |/ r0 v) [3 s. Ydata=[1,2,3,1,2,2,4,2,3,1,2,7,2;/ `4 y( g+ G& y( f
          1,2,3,6,2,2,1,4,3,1,5,3,1;
    $ v) I6 Z8 Y' V" y      1,2,3,1,2,5,1,2,4,1,2,3,2;9 r! H4 I2 _8 n) ]; k3 n5 o
          1,2,7,1,2,2,1,2,5,1,2,4,1;4 I% f1 T3 y# l2 R0 l
          5,2,3,3,5,2,1,2,3,1,2,3,6;/ q& X! m& X* s* H9 d$ b: ]& r* r7 B
          1,2,3,1,2,2,1,6,5,1,2,6,4;
    / J9 i9 m* @: A: b9 ]1 L* \: {      5,2,3,4,4,2,1,2,3,1,2,5,6;8 b7 P4 F4 a% a/ x/ p" i' H2 U/ e
          1,2,6,1,2,2,1,2,3,1,4,3,2;( p* @  Z) z" ~7 r, h/ v0 i
          1,2,3,4,2,7,1,4,3,1,7,3,3;
    - {+ i/ @- @9 V9 R) L7 a5 R      5,2,3,5,2,2,1,2,3,1,2,3,4;
    8 {- F7 l! r6 R7 S      5,2,4,1,2,2,5,2,3,7,1,6,2;]

    ( V0 ]( M$ q0 O& c6 _: z4 ~  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;1 \% p2 o* D* s
              1,2,3,6,2,2,1,4,3,1,5,3,1;
    & j  z. K/ z# v' f6 s$ R: k# c0 `          1,2,3,1,2,5,1,2,4,1,2,3,2;, Q# s3 ~0 M/ @$ w2 W* Z9 K. V# I, t
              1,2,7,1,2,2,1,2,5,1,2,4,1;3 ^( e+ q* V, {: z! `
              5,2,3,3,5,2,1,2,3,1,2,3,6;9 R* O2 O* ^8 S7 ~. ~- s7 s% y
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    , Q& a2 W7 \4 Y. D2 d          5,2,3,4,4,2,1,2,3,1,2,5,6;
    3 _: p4 C6 y' \0 d7 C/ e6 s/ h          1,2,6,1,2,2,1,2,3,1,4,3,2;
    " |/ Z; [& _& ?7 v' ?          1,2,3,4,2,7,1,4,3,1,7,3,3;
    / h* K# ?  z6 j+ i/ ~* d" A: n8 `5 A          5,2,3,5,2,2,1,2,3,1,2,3,4;" r# K4 h  N9 Q
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters. r, X1 t# A5 R+ [# I* {
    % 初始化参数
    9 l8 |2 ?. a% }$ H+ hprior1 = normalise(rand(Q,1));6 U- X" v! R" _* t1 Y4 Q
    transmat1 = mk_stochastic(rand(Q,Q));: W, q. |4 o% ?6 L/ Z! |% e' {
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    * u, a4 v0 D. M! C5 d% 添加部分
    * t  ?& D; t  j; o" S! x7 s1 j# ~    prior3 = normalise(rand(Q2,1));* w9 H& Z  r6 n2 U2 I8 v
        transmat3 = mk_stochastic(rand(Q2,Q2));
    4 y2 f* z& y, [8 Z    obsmat3 = mk_stochastic(rand(Q2,O2));
    & _/ l3 ^3 \+ \# I7 }9 ~, M%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM: J) |& H1 X8 p& A. v. M8 i
    % 用data数据集训练参数矩阵形成新的HMM模型7 \* q7 p) U! |$ U! H
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));! T% Y! J" h/ y
    % 训练后那行观察值与HMM匹配度
    6 z+ L: C4 w) ]+ F7 XLL
    8 e0 X3 [5 f8 W% 训练后的初始概率分布+ ?/ ~! D# A" |% \1 @/ H0 V
    prior2
    7 x" S% w/ C" {8 X7 K; @. s% 训练后的状态转移概率矩阵' n( \% e$ F# G" |) e2 m' S  ~: k
    transmat2
    ' w0 V9 N5 C# v: x# m% 观察值概率矩阵" `+ z- k* S8 r$ r7 g2 E7 |  I
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8 o, ]* Q  t* M! @
    % 添加部分# Q$ Z" b2 o# `/ q
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));* `# x: I$ s" ~# r  q! V: Z3 b: N
        LL2
    % b5 i, n3 C; L  R. a) Q7 I9 T  D    prior4
    0 l; l% B7 _' V% a6 E+ _" y, P4 ~9 m. S    transmat4
    0 v  @% {9 k7 g3 i' [    obsmat4
    5 F. @% {) p& I' c8 @8 x/ o2 g%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood% n# s" `& q3 w/ v2 W+ c5 [* e2 R
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]: o1 o/ E9 u. ^1 |- X  l
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]
    ; ]/ ]5 r1 V! @. D; |1 A0 E2 A: q8 Kloglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    2 C  N& D5 |9 s1 z& X# b% log lik is slightly different than LL(end), since it is computed after the final M step
    " X% d' p# f1 L" }7 T- w7 k% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    " t: K* ~5 y( b% 添加部分
    4 _: A9 O3 G+ m+ ^/ F8 p$ xloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)% d7 [6 Z" B! b% C$ Y! g. D
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    ' ^* p" m! q) H1 Z+ x0 s8 l5 PB = multinomial_prob(data1,obsmat2);0 }/ C& A1 B( N3 h0 i) O9 A
    path = viterbi_path(prior2, transmat2, B)
    8 g7 L# E0 ]# M& E3 I1 D0 [2 K6 Fsave('sa.mat');

    9 Y4 o/ x, O( ^7 ^+ j9 K8 |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4 K5 _/ E2 j7 H9 q, a. v
    % 添加部分! p! a9 b0 r; u; N7 x
        B2 = multinomial_prob(data1,obsmat4);; s& D( @9 Q2 Z0 b
        path2 = viterbi_path(prior4, transmat4, B2)5 z5 Z3 G7 `8 N( v( `) d
        save('sa2.mat');
    # J  f# G2 p# Y; Z    if loglik2 > loglik
    ' m4 J. C- s9 A" j2 u0 P        fuhe = 2( H" T) E- H' |- V4 t' w0 F5 [
        else
    9 V9 R) i) N# d  E        fuhe = 1
    5 V, R- i1 H3 ]: h+ e    end   
    ' P2 ^4 V& g( q' x- `%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     23 g7 i+ ^+ \- f. K6 d+ n, q
         1     2     3     6     2     2     1     4     3     1     5     3     1, ^: b# {3 `: `8 T2 _
         1     2     3     1     2     5     1     2     4     1     2     3     2  K9 a* J) S; v, M0 d( v1 |! H
         1     2     7     1     2     2     1     2     5     1     2     4     1
    6 P1 q( m. H! j     5     2     3     3     5     2     1     2     3     1     2     3     6
    ; s* B$ O1 @6 x& Z. t8 y% z9 @; A     1     2     3     1     2     2     1     6     5     1     2     6     42 G& E  f; `! n$ y1 w9 V
         5     2     3     4     4     2     1     2     3     1     2     5     6
    3 P: m( Q0 j$ v2 Z7 n9 ^     1     2     6     1     2     2     1     2     3     1     4     3     2
      `2 n# x% f; U" `$ X8 [, R! Z     1     2     3     4     2     7     1     4     3     1     7     3     37 T9 j" l6 e5 e3 M$ q! Y
         5     2     3     5     2     2     1     2     3     1     2     3     4
    9 t  c; T" f# F2 N. y/ K     5     2     4     1     2     2     5     2     3     7     1     6     2
    1 W, s1 }4 S7 S
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    : y) L2 N0 a) }7 [& A6 l/ y- @     1     2     3     6     2     2     1     4     3     1     5     3     1
    " ?4 e& S3 k8 q5 i     1     2     3     1     2     5     1     2     4     1     2     3     2
    8 ~' S+ ?1 Q2 `, e- I( ]1 D     1     2     7     1     2     2     1     2     5     1     2     4     1. F8 P# @5 S8 q! r1 `
         5     2     3     3     5     2     1     2     3     1     2     3     60 g; k, d7 h( @, i
         1     2     3     1     2     2     1     6     5     1     2     6     4
    3 _- O, W- _+ }1 |; [     5     2     3     4     4     2     1     2     3     1     2     5     6
    - k9 h/ r( `3 k- M5 T! m$ l. C9 o( n     1     2     6     1     2     2     1     2     3     1     4     3     2
    , K3 \1 o( B0 Q9 }' M8 E     1     2     3     4     2     7     1     4     3     1     7     3     3
    + @0 z. Y' y8 M4 I" G, j0 d7 s     5     2     3     5     2     2     1     2     3     1     2     3     4
    0 N: f. w4 [. r  ?     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    ) m; U. c  x! N: Y) |7 witeration 2, loglik = -238.2598125 E  U: l+ ~1 b# n* x
    iteration 3, loglik = -232.962948/ p1 n; r% `2 O! S6 Z; s
    iteration 4, loglik = -223.3238910 e+ w5 l; t* |8 T
    iteration 5, loglik = -207.630875, Y/ C$ u7 H; T
    iteration 6, loglik = -191.012697
      ]% r/ D8 d% [% u' Q  c; q9 p' ?- Ziteration 7, loglik = -178.611546" s! e  C" h/ ]! `9 {/ ?
    iteration 8, loglik = -171.524132! s4 V/ e2 r- i. @, h8 Y
    iteration 9, loglik = -168.626526
    ) G; A  |  S: q% aiteration 10, loglik = -167.387057
    " Q5 M1 |8 S6 V/ f/ ~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
    ' v0 W$ J+ i, l. K4 k/ G
    prior2 =
        0.0000
      u  Z# \1 T; k$ i    0.00007 q. O3 q$ a' @, d2 [
        1.0000+ ^7 h6 |# s. h8 T. ^( m" p
        0.0000
    : h; [& n8 t3 p- H/ s    0.0000
    - x4 U& f& l4 s6 p. }  o2 N
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033  }+ S1 o4 {" i2 k# D" h
        0.7811    0.0000    0.0199    0.0067    0.1923' f1 U  g4 c) h' |
        0.0000    0.9936    0.0000    0.0064    0.0000% d* e: Y5 ?( K8 B
        0.1686    0.2604    0.2242    0.3398    0.00702 f' `' R2 u3 D8 c
        0.0053    0.0406    0.8350    0.1184    0.0007

    1 b/ Q- H0 e0 I8 k" xobsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    " S9 d* j, y% N0 i    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.02281 M1 S# A. J) u! D/ k% M2 v# Y
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000% V( f# V; [9 _& y, l' r
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.00553 }4 j' T, L" G' o, d0 x% [. u9 [
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    : q: B; \4 ?7 p  ]$ ~1 `iteration 2, loglik = -242.163247
    4 n6 i0 T" s. s4 Diteration 3, loglik = -238.321971
    1 l+ X" V% S  A/ niteration 4, loglik = -233.166746
    : `9 ~; t; H$ W1 j! s9 x) @& ^8 R% ?iteration 5, loglik = -225.682259  r4 B/ C" U( U% ~2 u
    iteration 6, loglik = -214.5602963 T& W0 @  O) x
    iteration 7, loglik = -201.182015
    6 s' u$ o7 n( N5 V- Niteration 8, loglik = -189.427453
    : P; ~: ^: B$ J$ u/ f) ~iteration 9, loglik = -179.156352
    8 a- Y8 d4 G5 eiteration 10, loglik = -171.744096
    5 O1 V7 ^8 p6 V$ _4 T. N* Riteration 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
    8 K/ U% O5 P) D3 w4 d3 j
    prior4 =
        0.0000
    # ]5 u% L/ G( \7 o# I    0.9982
    + ~+ u6 F- y& }; i    0.0004
    / S& G* w' D0 g* ?% F" }7 m# w. R    0.0014
    7 Y: ?6 W  T) l; |    0.0000
    # I( [& @/ r: D3 t
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045' p) Y4 C' \6 R4 c
        0.0002    0.0000    0.0005    0.0000    0.99949 K; `/ N9 [1 m" z- c$ l
        0.0180    0.0000    0.0118    0.0011    0.96928 H! F2 _0 ^  H; r( o
        0.0436    0.0226    0.0810    0.0219    0.8310
    1 c% b5 ?) `! \9 y    0.9746    0.0056    0.0003    0.0195    0.0000

    $ K( \1 W* @8 Tobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    ! G' x" i  R) D    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.00009 W" {: |; H3 X* Q4 b( e  r
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    . E. @8 U5 c  ~/ L    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.08027 w7 C3 }; G; @& S2 y
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    - m7 k, _% @4 s: \data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    1 t/ U& |. v5 }) ^loglik =
      -19.2351
    # {5 J3 ~8 N2 ~4 Z( V" @6 V( z
    loglik2 =
      -21.0715

    # B; W4 [5 c! x) Epath =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    % T: i1 [) j7 k. \8 i3 h
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    / l) ?! a5 x: b2 v- O3 lfuhe =
         1

    # e/ @  ^! i" Z$ ]1 r4 t' m/ Y8 f+ `0 h! J5 U
    7 }$ t) ]; D* w6 ^; k/ f+ ^/ {

    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-7-27 06:14 , Processed in 0.403830 second(s), 55 queries .

    回顶部