QQ登录

只需要一步,快速开始

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

    . L0 c/ I% k5 B! J3 w. o# ]隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱/ y$ j  T. G- n/ _8 v" u4 g
    % ①定义一个HMM并训练这个HMM。
    7 X: l5 B# ^4 s/ n& [9 j8 q% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。3 j* h* \/ B( U
    % 修改:旺齐齐
    " i3 b( @/ {/ `' n1 j% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。/ S" `& \/ g" {2 Y) x
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数* R( `) R) k$ B. z" L8 a& S
    O = 7;' e% U1 S3 V# f4 ?0 E
    O2 = 7;
    2 ?% [6 J* \/ B& y0 H% Q:HMM状态数
    & U5 ~1 E0 T! V, S# u. C: ]Q = 5;
    # p2 H& C9 d. j# }Q2 = 5;
    % b; n% m- S  P%训练的数据集,每一行数据就是一组训练的观察值
    4 T. H# m( n3 ~; T8 h; T* ~0 Mdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    ) R+ W# C2 D* p( Q# [/ \      1,2,3,6,2,2,1,4,3,1,5,3,1;
    % o/ a. f6 a, V      1,2,3,1,2,5,1,2,4,1,2,3,2;5 p6 `; ?, i- s! q" F6 F8 u! Q
          1,2,7,1,2,2,1,2,5,1,2,4,1;
    # ~0 p7 @9 U- }/ Y  O# B      5,2,3,3,5,2,1,2,3,1,2,3,6;
    ) `, g; y% M  V      1,2,3,1,2,2,1,6,5,1,2,6,4;3 e8 Q: G0 M6 M0 V) m5 A2 K
          5,2,3,4,4,2,1,2,3,1,2,5,6;; X9 b7 M; Z1 }$ Q8 g7 B1 p, k
          1,2,6,1,2,2,1,2,3,1,4,3,2;
    3 m* m* V! ~: j/ T2 I      1,2,3,4,2,7,1,4,3,1,7,3,3;
    8 C# O0 ?: b' L6 |( \/ d! D0 }      5,2,3,5,2,2,1,2,3,1,2,3,4;
    . k! Y; l. o) l# @9 J- V8 ]1 s      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    ' f$ K9 S8 ^+ e" V% h- A
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;2 {3 q0 u. E6 i" f
              1,2,3,6,2,2,1,4,3,1,5,3,1;4 d* C' o/ Z: I% Z, D/ ]/ w
              1,2,3,1,2,5,1,2,4,1,2,3,2;$ E3 X% R3 |5 U: U2 Y( ?  c
              1,2,7,1,2,2,1,2,5,1,2,4,1;5 r1 j& K& v" J! n
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    * t4 }% A; Y: X; ^: k$ ?          1,2,3,1,2,2,1,6,5,1,2,6,4;
    7 H  f9 G, _3 Z# ]          5,2,3,4,4,2,1,2,3,1,2,5,6;
    , d8 `* P" t2 V6 O+ o% a          1,2,6,1,2,2,1,2,3,1,4,3,2;
    9 @, w2 x: k. X7 x! o          1,2,3,4,2,7,1,4,3,1,7,3,3;
    5 y) \1 O5 J2 {5 ]2 d          5,2,3,5,2,2,1,2,3,1,2,3,4;
    6 }1 v8 v1 h4 ~4 O8 p          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    % X- C" |7 R# g4 C6 S% 初始化参数8 r3 u# n2 c3 M, D4 a. [
    prior1 = normalise(rand(Q,1));
    4 J/ W( [$ o. c6 P9 _* otransmat1 = mk_stochastic(rand(Q,Q));  i2 ]' {& V8 m6 x
    obsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    6 r8 R! @8 g: d1 w+ U$ e5 O  y' P% 添加部分
    8 R4 `5 p/ b8 t0 e2 Q7 ^9 j$ m0 I    prior3 = normalise(rand(Q2,1));6 f& v+ t* |  X. j  W9 f+ s& g
        transmat3 = mk_stochastic(rand(Q2,Q2));) E7 }$ H; y/ k
        obsmat3 = mk_stochastic(rand(Q2,O2));4 I) W" J. N; k
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM0 F. p: r; n, M% }
    % 用data数据集训练参数矩阵形成新的HMM模型+ p, R2 \* M4 v
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));" f% Q$ X1 D+ a
    % 训练后那行观察值与HMM匹配度" b; E6 k" F+ N0 d) x! M
    LL; S$ Q. j( S$ B% }
    % 训练后的初始概率分布3 U: \% B2 J4 `" W. D' p2 \# Z) ^
    prior2
    % u+ \% P" {6 X* z4 T+ b% 训练后的状态转移概率矩阵# d1 f6 W! x! K  R2 R; ^4 v' R
    transmat2
    / _: z, I) q4 o" o" M4 ~% 观察值概率矩阵
      |# W+ j2 V5 p& bobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 |' G$ [/ H! V1 U
    % 添加部分
    " Z( s6 b- v; ]- A. I0 x( i    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));/ M, h0 n$ Z; y6 o: ^  Z
        LL2. T, y+ Q, Y) q' i0 z% D) z8 g- [/ D
        prior4
    ; e- U# T! L& Q4 D2 v/ J1 n8 O3 t0 R    transmat4% Q4 W; h4 }0 G6 S- U9 s
        obsmat4# u/ H( S5 C' O# i  ]% q
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood: x3 Z8 l' s: f* W. e. |1 y
    % data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    ' e7 t- O0 T1 Cdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]2 E4 M3 c& t6 z
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)* {" f: a. m# R1 _; e' D
    % log lik is slightly different than LL(end), since it is computed after the final M step2 S$ N& Q2 G1 `: S$ P
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3 [5 A# D% Y- ~# ?" \4 S
    % 添加部分
      N/ _, Q( A( H8 v( Z7 Ologlik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)6 V( S) k( U0 ?" S
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    4 z5 e3 G. j6 JB = multinomial_prob(data1,obsmat2);
    & A' l8 c+ }' K6 ]; xpath = viterbi_path(prior2, transmat2, B)
      P; u3 j7 r( ?- y& l, e/ Dsave('sa.mat');

    # `# g9 W$ |4 d4 [9 i$ z%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ; L- J" {' L0 H8 c  L. _9 w# G% 添加部分( m6 Z+ N; }; M# b1 Z* f1 O8 G
        B2 = multinomial_prob(data1,obsmat4);5 A! V# Z& _6 V/ c
        path2 = viterbi_path(prior4, transmat4, B2)
    8 q: L& E: o7 [. R) }8 b    save('sa2.mat');+ Z- V. |) o* F
        if loglik2 > loglik
    0 l+ m  _: k' X& M        fuhe = 24 J6 I) G' c0 ]7 h' U! w
        else4 `( V( I1 @5 N. b& _
            fuhe = 1
    * t- v* R: c( j& j$ n9 ~    end   
    5 ^' x/ c! A( o) T1 M5 T+ Y%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     20 v: ~1 \, J% D) @# t0 {2 ^9 V
         1     2     3     6     2     2     1     4     3     1     5     3     1
    * |# M: E, M8 t* ]# S     1     2     3     1     2     5     1     2     4     1     2     3     2% K! O9 S" C4 r" W  {5 |
         1     2     7     1     2     2     1     2     5     1     2     4     1. S5 \6 O/ y/ F
         5     2     3     3     5     2     1     2     3     1     2     3     6" U2 ], X& O3 N3 L: @2 Q
         1     2     3     1     2     2     1     6     5     1     2     6     4; r) X, B) |( N" V0 m; m. x( }
         5     2     3     4     4     2     1     2     3     1     2     5     6
    5 F- [; J$ ~0 I3 V( v  R0 U8 e# d( p     1     2     6     1     2     2     1     2     3     1     4     3     2
    1 R& w1 ~$ s1 K/ O+ A" \! q! d2 V     1     2     3     4     2     7     1     4     3     1     7     3     3
    5 J* T& G1 ^# }0 s7 g1 x     5     2     3     5     2     2     1     2     3     1     2     3     4  E: W3 i/ E+ n! ?' B
         5     2     4     1     2     2     5     2     3     7     1     6     2

    9 z8 x, y- M' q5 H$ i, U8 b2 ~4 \data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ( B# E( h2 z% E0 {     1     2     3     6     2     2     1     4     3     1     5     3     1: a$ k' E3 e& `2 c5 [3 j
         1     2     3     1     2     5     1     2     4     1     2     3     2; }) F4 x1 k( r8 H0 G, ^: C( g, X
         1     2     7     1     2     2     1     2     5     1     2     4     1
    # m9 u' B6 D/ t     5     2     3     3     5     2     1     2     3     1     2     3     66 b2 Q' U0 {3 P+ j9 t; n/ ]
         1     2     3     1     2     2     1     6     5     1     2     6     4
    . Z! Q% x. d6 b     5     2     3     4     4     2     1     2     3     1     2     5     6
    # M& ?; y% ~9 o  X8 T     1     2     6     1     2     2     1     2     3     1     4     3     2
    ( S2 ~" y: Y& f6 s     1     2     3     4     2     7     1     4     3     1     7     3     3: ]: W! T8 `# m0 m" l* @  A1 a
         5     2     3     5     2     2     1     2     3     1     2     3     4% a3 }2 t# M6 K: P# w1 i+ p
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465/ K) u% Z, ^7 Y& v: d: l
    iteration 2, loglik = -238.259812
    $ y4 V2 y* J8 f, K7 B& hiteration 3, loglik = -232.962948
    ) \3 c- T% L& d1 {) Witeration 4, loglik = -223.323891
    6 n* A7 ^6 P( C; Qiteration 5, loglik = -207.630875
    3 B7 h% C/ ~% R, ?7 D$ Q( E* giteration 6, loglik = -191.012697/ J& _& z- T* t4 _* A# o# A" d
    iteration 7, loglik = -178.611546
    8 `5 q% U0 @1 Z7 Kiteration 8, loglik = -171.524132
      K! m2 i4 |+ S, w. H2 Diteration 9, loglik = -168.6265264 F3 `1 v. {$ b1 e6 J2 A! n
    iteration 10, loglik = -167.3870578 W5 B3 ]$ T" a4 D$ j
    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

    $ `% P9 L0 i  J! Qprior2 =
        0.00003 |/ x2 N; ^. |6 n* X1 G1 t% u% X
        0.0000
    " W3 V& l  g2 B' y8 w6 ~    1.0000! W+ L6 [+ s/ c+ t  {8 ]
        0.0000
    , F, }& J4 e8 u5 A    0.0000

    1 T# A. R. s" }6 Otransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033- q8 v' ^0 C) g& {9 Z+ e2 T
        0.7811    0.0000    0.0199    0.0067    0.19230 ]5 n2 r8 b# `/ d. y$ N
        0.0000    0.9936    0.0000    0.0064    0.0000* T& u3 c5 [4 j2 o( u: @! I
        0.1686    0.2604    0.2242    0.3398    0.0070
    . H6 A: V6 i6 P- P6 h1 Y& t    0.0053    0.0406    0.8350    0.1184    0.0007
      @4 m) e! V6 i, D/ U
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    # j3 T% s8 r, O: P% W/ i    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    # M# i3 s9 n9 H& M% K; u, T    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    $ V- J  q$ s6 Q3 J" P( K    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055# I0 j3 @/ J* G6 x( W% a! @
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670# a1 K) ]0 y4 o- q  _  y- E, L
    iteration 2, loglik = -242.163247% B/ h; l' o. k+ y  b3 f
    iteration 3, loglik = -238.321971/ D) i$ D3 A1 u9 D2 l7 T% p
    iteration 4, loglik = -233.1667462 ~1 i9 o% n; y" C
    iteration 5, loglik = -225.682259# H* \+ G" _3 Z/ L
    iteration 6, loglik = -214.5602969 D; a% H$ P. Q3 m; s* |' s
    iteration 7, loglik = -201.1820159 N3 v. N- h$ S1 `9 A
    iteration 8, loglik = -189.4274532 B- j, ^$ ~, I( c
    iteration 9, loglik = -179.156352
    - `' K' C, e5 G5 q9 w2 Z) kiteration 10, loglik = -171.744096
    # J  P- n' C* \! Hiteration 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

    $ Y/ Q! l0 |0 W5 ?* g7 Aprior4 =
        0.0000: q0 |: i4 D3 c) o/ p( i5 k: A. \
        0.99825 K& h  T! P  b1 k+ b: {1 }
        0.00041 N% h  Q* S2 w( [6 u
        0.0014/ r/ U! ]" O9 V4 W9 X8 v+ w5 u
        0.0000
    + b4 x: @' Z6 h0 G
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    & v. F  Y$ R$ M    0.0002    0.0000    0.0005    0.0000    0.9994
    6 e5 ?& J. _1 P    0.0180    0.0000    0.0118    0.0011    0.9692& z$ j- z! @9 T; O. s! V  q6 K
        0.0436    0.0226    0.0810    0.0219    0.8310, Y/ y# ~8 y: F6 H. Y0 k
        0.9746    0.0056    0.0003    0.0195    0.0000

    # `' A+ [, D0 ]' Aobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770- {* v7 E( J$ J
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000, C. U. @7 C1 ~  P) i
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    , _4 J- @7 J2 K- E! E. C; O/ o' s- ]    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.08020 L4 e! \4 x# Q6 }& ]* w
        0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    4 a5 ?. T' P8 g( r
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    8 ~# w6 L; |: }
    loglik =
      -19.2351

    - H& n3 Z3 t  F5 g# B# c5 F: M9 Wloglik2 =
      -21.0715
    2 r- S' S! k9 A2 |  X
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    " j% B/ C+ M, {& h
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    $ W$ l. L2 L! `2 ^# {
    fuhe =
         1
    5 j0 ^. b0 `+ O. ]1 G: _, n

    # r* M: f2 z7 K' ?% J# d; Y0 _) w, w* _

    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-10 21:59 , Processed in 0.481559 second(s), 55 queries .

    回顶部