QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1750|回复: 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
    ; j) Z+ j; R6 |
    隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱, N2 H9 W. o7 F% L3 ~
    % ①定义一个HMM并训练这个HMM。
    ' W/ A, U. o  H. ]% ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。
    1 a, {# V5 @2 h% 修改:旺齐齐
    ' @7 S+ T( Z6 R4 O* X7 [& N- ]% 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。& Y  \9 k: Z& R, u3 k5 b
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数
    - y( s9 V* `, t1 k# IO = 7;" w4 e  V) f  P8 e1 `
    O2 = 7;
    - X0 R/ O5 c! C* F% Q:HMM状态数0 h. U( y: j8 \7 M& w' }( k8 {6 O
    Q = 5;' ^/ P9 R7 k! |3 h& D( u6 ?2 f
    Q2 = 5;
    " L5 x: ^7 B' K% p, O%训练的数据集,每一行数据就是一组训练的观察值
    5 v, B0 q) C( {" l" Edata=[1,2,3,1,2,2,4,2,3,1,2,7,2;1 a  y+ o/ G5 Y/ a
          1,2,3,6,2,2,1,4,3,1,5,3,1;
    ; r" N+ Y' R: }+ |: e' n* |      1,2,3,1,2,5,1,2,4,1,2,3,2;* f6 Y, D* P- K  @$ v. q: t
          1,2,7,1,2,2,1,2,5,1,2,4,1;: \9 d5 ?, [  D0 I
          5,2,3,3,5,2,1,2,3,1,2,3,6;
    2 p, O+ J0 W5 P8 C% g$ W5 y6 z1 |  D      1,2,3,1,2,2,1,6,5,1,2,6,4;/ M: O8 s% ~9 v5 V/ t( `& J
          5,2,3,4,4,2,1,2,3,1,2,5,6;
    ! W( Z5 o1 I- x0 M      1,2,6,1,2,2,1,2,3,1,4,3,2;
    2 x9 F# {3 N: B/ h( p% C      1,2,3,4,2,7,1,4,3,1,7,3,3;" ]5 H( v! P1 k5 G# I
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    / Q2 }, N4 s) Z4 k: n# f      5,2,4,1,2,2,5,2,3,7,1,6,2;]
    9 }9 V- |' N2 M1 a( Y/ G
      data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
      }$ Z! m4 b2 A, T          1,2,3,6,2,2,1,4,3,1,5,3,1;& ]2 f+ _/ X" G' D
              1,2,3,1,2,5,1,2,4,1,2,3,2;
    ' B/ z1 l1 Z5 g+ G          1,2,7,1,2,2,1,2,5,1,2,4,1;7 Z7 O0 H, e3 ~! o! d" V4 z. ~& @
              5,2,3,3,5,2,1,2,3,1,2,3,6;5 j( `; @9 a: O/ ~1 l' ~7 v
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    , J1 d0 l* c& k          5,2,3,4,4,2,1,2,3,1,2,5,6;* }: X* A( I2 p+ t! Z) z$ S+ a/ e
              1,2,6,1,2,2,1,2,3,1,4,3,2;
    3 C" e+ @' |& I  d          1,2,3,4,2,7,1,4,3,1,7,3,3;
    # H; ]) c" e9 E0 o" _          5,2,3,5,2,2,1,2,3,1,2,3,4;
    , U# _! Y9 u! p- G& R' }          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    # O- _3 j1 {3 t, _/ K% 初始化参数; `% H) m2 y. o3 ^0 I! c
    prior1 = normalise(rand(Q,1));
    7 @- _4 ?8 n: L& ]4 [transmat1 = mk_stochastic(rand(Q,Q));
    ; t  z: ]3 v# s) U9 h0 l3 P, e. Mobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%. H  l; d( p0 r) _0 j, u4 [
    % 添加部分
    + V! q/ L/ L5 p1 q5 G, c. ]    prior3 = normalise(rand(Q2,1));
    ' p) L6 r$ I, [* @6 [8 o    transmat3 = mk_stochastic(rand(Q2,Q2));; W, ]0 ?1 h- D7 R
        obsmat3 = mk_stochastic(rand(Q2,O2));
    ! @  m! i# ?' w3 E6 p7 y%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM
    $ p7 {2 p8 A0 t) E# T: l0 k% 用data数据集训练参数矩阵形成新的HMM模型$ b# x/ {, I; \7 w1 {% D
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));; @- r2 F9 Q% \& `: l9 c2 M7 ]
    % 训练后那行观察值与HMM匹配度, {! l5 @5 s) l7 @% X4 R: t6 t6 y
    LL
    , Y0 D( r8 V( [# E( L" N+ S% 训练后的初始概率分布( Z: r) y( T, |$ V$ F5 x% p4 I) o$ z
    prior23 X, Y; E- {3 k* H& e! v
    % 训练后的状态转移概率矩阵
    * g# _7 Z( G% b. Gtransmat2& `9 F, M; V; Y9 l1 O1 v4 d
    % 观察值概率矩阵
    & t5 ~1 F. _/ h8 a. {/ robsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+ i9 n/ O# w" c. d
    % 添加部分' ~7 e7 T( A9 z' u0 i, }+ V7 \
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));+ l; o* i0 ~4 A
        LL2
    0 Z( e/ o8 h' ?    prior4" l! ^; m5 n2 B2 Y0 r! W
        transmat4; I9 B2 U6 A! P* f* s9 s) `
        obsmat4. A& ^( J6 {+ D. @$ z" N% ]
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    $ X' B, W' A8 @4 J% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    : ~2 ]" k# f6 M$ |data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]8 P9 e) Z2 p9 e) i
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    4 r9 X# {" h# J7 `' [6 ]) o% log lik is slightly different than LL(end), since it is computed after the final M step2 n% Y8 m% w: I; H; ?% y
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7 p7 R; R  }( F+ h- F0 l
    % 添加部分7 z8 `% i0 ]/ `5 S' q
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    / C& v$ D( S5 U%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    # B; `8 F3 u; S4 \! h) uB = multinomial_prob(data1,obsmat2);  j) t& {7 u& M! Q! t/ o% A7 l5 R( U# A! i, X
    path = viterbi_path(prior2, transmat2, B)
    ( G5 Q9 P" [; }3 z: B& _2 hsave('sa.mat');
    & c. _; N: a$ C
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 O& e" A+ ]- \2 J4 v* l: i
    % 添加部分! o" G' W- g, i( ^0 L  e
        B2 = multinomial_prob(data1,obsmat4);2 C; f/ N( I& `; }: t" r4 b* X
        path2 = viterbi_path(prior4, transmat4, B2)
    ; \; d0 O  l) S  f    save('sa2.mat');- ~; }# z5 O3 G2 R; {! q
        if loglik2 > loglik   S: K* P3 {2 N9 ^; X0 M3 @& [
            fuhe = 2
    ' O# S- I8 N$ I9 J4 U9 I    else
    & I- t1 q8 i( _        fuhe = 1
    & k4 X) ~) _; k' Q; R    end    ; ^% x) u3 W- l. k1 b6 F& i' [$ N% v
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2# m+ ?) j- K" s% Y9 `$ P: Z1 e
         1     2     3     6     2     2     1     4     3     1     5     3     1* e0 [+ S3 z* L( W  R
         1     2     3     1     2     5     1     2     4     1     2     3     2
    : b% F5 j3 {+ u/ O; D- b     1     2     7     1     2     2     1     2     5     1     2     4     1
    / Y; w0 ?- G( B     5     2     3     3     5     2     1     2     3     1     2     3     6
    ; G- b5 i, z" k' w+ u9 U+ U. s- I: W     1     2     3     1     2     2     1     6     5     1     2     6     4, V$ I% M$ ~. r( v7 C# @1 L7 d- P
         5     2     3     4     4     2     1     2     3     1     2     5     68 }8 K& p( q* Z* Y
         1     2     6     1     2     2     1     2     3     1     4     3     2+ t; d* u( q9 l- `3 T/ F* g
         1     2     3     4     2     7     1     4     3     1     7     3     3; o( X; \! P9 `' P" m2 J' J6 B5 X$ a
         5     2     3     5     2     2     1     2     3     1     2     3     4+ m& F# H. [3 @5 }8 I/ k; @+ @
         5     2     4     1     2     2     5     2     3     7     1     6     2
    7 L( a& x7 G/ C1 q* w
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    ) Q0 M% ^9 g4 V6 ]     1     2     3     6     2     2     1     4     3     1     5     3     1, v! _; c0 f4 d1 _1 r& v
         1     2     3     1     2     5     1     2     4     1     2     3     2! d# g! V4 N3 S( i
         1     2     7     1     2     2     1     2     5     1     2     4     1
    5 \4 u* v4 ?% q8 F9 p     5     2     3     3     5     2     1     2     3     1     2     3     66 E- e: r7 f% M/ K4 |
         1     2     3     1     2     2     1     6     5     1     2     6     4
    5 h4 z/ b% a+ [     5     2     3     4     4     2     1     2     3     1     2     5     64 i4 }: p( M* g
         1     2     6     1     2     2     1     2     3     1     4     3     2
    ' D. y) a  x, n. Q& K5 g     1     2     3     4     2     7     1     4     3     1     7     3     3( B# G+ H4 p9 t9 [" j
         5     2     3     5     2     2     1     2     3     1     2     3     4
    5 i) x/ {; s% i; O7 X2 c     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    ' w, @9 N% x8 z' f7 D7 Citeration 2, loglik = -238.259812, l2 Q7 O8 S9 W6 e+ h7 G
    iteration 3, loglik = -232.962948
    + F/ w- q; |- k# k' V8 R6 kiteration 4, loglik = -223.323891: E( \8 M0 N( l
    iteration 5, loglik = -207.630875) n( O* ]& |5 l/ H
    iteration 6, loglik = -191.0126973 }' A5 ?: ?: }+ Z3 Q
    iteration 7, loglik = -178.611546
    ! d- _/ @% R( c, Z8 Qiteration 8, loglik = -171.524132% R9 ~5 L% N- l1 X8 {4 Y% a
    iteration 9, loglik = -168.626526
    3 d; @# N- l$ n! G$ P5 `: fiteration 10, loglik = -167.3870573 X- r; d5 f1 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
    - }8 O! n: \2 o3 j/ L* v
    prior2 =
        0.0000  K9 y5 }5 v0 Q2 {* m! w3 s. y
        0.0000' D& ^# g* \) F) o! k
        1.0000
    - A+ i4 _# b9 J  }; o    0.0000, L% y* b+ i! U* e7 n' r
        0.0000
    . L& F9 p, d/ g7 N9 L9 ^
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033- s0 o2 h+ y  ], o5 o
        0.7811    0.0000    0.0199    0.0067    0.1923
    3 R; S% f( F& h    0.0000    0.9936    0.0000    0.0064    0.0000
    7 S2 @# q8 Z' C    0.1686    0.2604    0.2242    0.3398    0.0070
    ( d) o$ T7 i( h. Z& I    0.0053    0.0406    0.8350    0.1184    0.0007
    5 l/ K  l( e8 C* d6 N
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351
    , a4 w3 d( C; Q  y- \# R6 c* B    0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.02281 p3 \2 ?! `9 }2 v
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00004 V' w/ `" W- r
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    % n/ }5 [2 K( Q6 b3 ]' p    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.7386709 w6 i  k2 |3 U2 _' c+ j8 q# t1 p9 ~
    iteration 2, loglik = -242.163247  a8 N1 Q3 G8 j9 A  q
    iteration 3, loglik = -238.321971
    4 v/ H; w4 d8 k9 ~2 Uiteration 4, loglik = -233.1667466 {$ {& p) Y' [" q- Z0 o
    iteration 5, loglik = -225.682259/ h0 K, z( |" z, [9 G' m. y
    iteration 6, loglik = -214.560296/ A: A4 X+ G! N0 l( p; `" y
    iteration 7, loglik = -201.182015/ j5 E4 e* x+ {/ m# v% Y
    iteration 8, loglik = -189.427453
    8 _! W1 P7 A% k3 v; v4 Miteration 9, loglik = -179.1563528 s7 |9 g+ x& f. f2 K5 [: E$ G
    iteration 10, loglik = -171.744096
    : {: L* d& S. I/ U: u0 diteration 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

    " E& |( b9 D  G: V1 Zprior4 =
        0.0000
    $ e/ o: h* X2 g" V  w' \; h* P    0.9982
    5 l2 `# h9 {% R4 o) X. W. I    0.00043 ?2 C3 I( z$ m7 `3 I' A0 h! q5 q# U
        0.0014
    ' X7 [" F) R" d7 [8 X    0.0000

    & H8 ^8 f6 N! \2 X- Q6 d( v6 Otransmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    : S# K0 }& C, ^9 V3 l6 f    0.0002    0.0000    0.0005    0.0000    0.9994' k( J8 p8 |/ v, l" ?
        0.0180    0.0000    0.0118    0.0011    0.9692* Y6 g3 p' E# C. f/ t
        0.0436    0.0226    0.0810    0.0219    0.8310
    # R9 B6 T! v; w8 T! \    0.9746    0.0056    0.0003    0.0195    0.0000

    $ i0 i: a) b; q4 e% sobsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.07707 h) }4 m- K9 s
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000: J' Q$ c# q0 m3 ~& u
        0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    ! k* o# B3 F9 p* r6 o; A    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    ; g1 [. L9 A; c! v' x9 t8 q    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    # K9 [! ~$ T! w0 o+ q8 I' x+ e
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    $ _/ A. C' Q$ b& B; ologlik =
      -19.2351

    1 z( d% O& [6 R7 C8 B+ i2 Z0 _" Uloglik2 =
      -21.0715
    ( x! K4 Q% ^5 K
    path =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    # S6 ~0 B* u8 `) K4 _
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    5 c2 ?9 C& F- w+ j* S: Zfuhe =
         1
    % [/ ?( P+ m7 j2 Z* d7 y9 ~

    9 p4 u" d+ s! u' N& X1 A) u! B3 j
    6 a1 m1 `" d2 Y, z

    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:04 , Processed in 0.732449 second(s), 54 queries .

    回顶部