QQ登录

只需要一步,快速开始

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

    ! ~: D1 U9 s8 f8 k. Y隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱4 H, A6 v! F9 w3 @3 R
    % ①定义一个HMM并训练这个HMM。( P' S& @5 O. ~/ X3 F
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。6 O$ O: o# N# N; J! G
    % 修改:旺齐齐3 c& }$ V* J4 T$ h+ W- _
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。/ i' X/ J$ R( t2 o0 L) Y+ q4 c
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数' r+ h  P4 R5 L4 o7 ]5 P
    O = 7;
    ; i2 K% H  |+ KO2 = 7;
    ; E# b6 t& t# s% Q:HMM状态数
    ; d5 e, i; A: X! B, GQ = 5;+ z' f. d2 m( V, J( ]' T+ a
    Q2 = 5;6 e1 a6 D+ q* P- E
    %训练的数据集,每一行数据就是一组训练的观察值
    2 Y' x+ c/ p" ddata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    9 Q0 X) V0 l* u, l- Z. G4 {      1,2,3,6,2,2,1,4,3,1,5,3,1;
    ' S5 W( s4 o/ t% L* b2 h( H      1,2,3,1,2,5,1,2,4,1,2,3,2;
    7 O1 X# x8 Z6 {9 Z. z$ n: m      1,2,7,1,2,2,1,2,5,1,2,4,1;
    & U, m$ H9 V* G! S$ Y; [2 O      5,2,3,3,5,2,1,2,3,1,2,3,6;8 [2 b) t2 x! O, M8 A  _7 _
          1,2,3,1,2,2,1,6,5,1,2,6,4;: A, e( M5 j. ^* T2 s+ l
          5,2,3,4,4,2,1,2,3,1,2,5,6;6 s3 w* Q5 |: q7 p. S$ D
          1,2,6,1,2,2,1,2,3,1,4,3,2;; W) S' c9 C9 I7 N% {
          1,2,3,4,2,7,1,4,3,1,7,3,3;# ^$ @! e  V# b+ t) O
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    4 w2 Z) v& A( e# d9 e- ?/ B  m0 \      5,2,4,1,2,2,5,2,3,7,1,6,2;]

    7 M# [  ]0 Z0 ^5 V( [* V+ V  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;+ d- o% z* {+ ~" r0 b
              1,2,3,6,2,2,1,4,3,1,5,3,1;5 a% l% M4 }1 I4 ?3 M
              1,2,3,1,2,5,1,2,4,1,2,3,2;! N5 C: k$ W6 Y. W" f) _3 F. K$ P7 O
              1,2,7,1,2,2,1,2,5,1,2,4,1;
    . L5 t9 |- F# Y! P: w* `          5,2,3,3,5,2,1,2,3,1,2,3,6;$ v" F# K- Z$ H+ R/ X7 a
              1,2,3,1,2,2,1,6,5,1,2,6,4;
    1 \. ?9 x0 j( y: b% b* G2 G2 D3 [# u          5,2,3,4,4,2,1,2,3,1,2,5,6;
      x, X6 ~( \$ j" ]! ]          1,2,6,1,2,2,1,2,3,1,4,3,2;
    ) K/ I8 ^1 P& W0 l          1,2,3,4,2,7,1,4,3,1,7,3,3;
    , Z( {/ E1 H4 _6 W- l) V% T          5,2,3,5,2,2,1,2,3,1,2,3,4;" x4 r# S0 e  h0 L
              4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters
    3 Q) G; i; m% F9 e/ N% b0 C0 N7 x% 初始化参数
    % S+ S" D) A9 [3 U4 I! Dprior1 = normalise(rand(Q,1));
    6 J- X" d4 J8 q# e% i, htransmat1 = mk_stochastic(rand(Q,Q));
    5 ?' e0 ^- u9 t5 x* sobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    7 p+ l" X, k1 a/ |+ p% 添加部分. q, X: V7 \: O2 S6 }9 \; |
        prior3 = normalise(rand(Q2,1));; j  r5 q9 k' J- q$ x. j, ~
        transmat3 = mk_stochastic(rand(Q2,Q2));
    " e- s5 k% p' L5 @$ R8 X1 Q    obsmat3 = mk_stochastic(rand(Q2,O2));
    - P  L* n2 P8 [/ \%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM. D" U( T+ S7 D( ?3 r
    % 用data数据集训练参数矩阵形成新的HMM模型
    4 d/ i7 A% o# V% Z% ^[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    4 D: x2 ]( B3 Q# ?9 U% 训练后那行观察值与HMM匹配度
    # ]& M% c4 S  ~9 W2 XLL
    2 Y4 i5 i/ F& z: H& X2 C% 训练后的初始概率分布  U; g( J! o4 ]; b4 L' y  x! }& x! U, ?
    prior2  c: v& @6 c6 k8 {) S$ R" w
    % 训练后的状态转移概率矩阵! j4 |2 P! Z0 J- q+ T3 a+ h. ]% f- b
    transmat2" ~. M6 M" o* y  N: Z3 G
    % 观察值概率矩阵. d+ I! A# n5 H. m% u4 G6 I$ ^
    obsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ S" e3 j% a/ G  ], f- x
    % 添加部分
    ( @3 U4 r  y8 L: I, _' [- J    [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));( W* b! l! V7 p0 q8 A+ a7 ?( }+ _3 J
        LL2
    8 I8 v0 [. p. Z    prior4  P+ C( x- p8 H% C% V4 F
        transmat4
    3 Q4 f5 z! I' v6 d% _0 m    obsmat4
    ; o( U- m( H3 c3 f- f%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    5 N5 L) U% x( U% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]4 n7 O* t* z5 Z6 P
    data1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]# _) w5 ?; G7 L% F2 x
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    6 E1 b+ K5 x* e5 D% log lik is slightly different than LL(end), since it is computed after the final M step; R( \* p. E( l. F5 u
    % loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%; j4 u6 q) ?7 L" ?  P
    % 添加部分) _$ J. P- p# r5 ^
    loglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)* i" H3 F4 j6 V
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    7 s; U! ?' _) o' [. mB = multinomial_prob(data1,obsmat2);% s: b4 y# M4 P& g: v
    path = viterbi_path(prior2, transmat2, B)
    8 y0 t9 k; v3 v& x; }: Usave('sa.mat');
    % s. _+ d# e* D0 X1 ?
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1 `$ c( Q: D3 x& E
    % 添加部分
      ]1 z7 f/ E5 {1 t, X8 ]    B2 = multinomial_prob(data1,obsmat4);! v$ v5 N. D- S$ P+ L; @+ ^# c/ M
        path2 = viterbi_path(prior4, transmat4, B2)
    : p8 Y( T: z& ^: n% z    save('sa2.mat');2 c* n/ Q7 D; q) n; G
        if loglik2 > loglik 0 N& V  y9 Y' i; U  {
            fuhe = 29 ?( U* P8 V# I7 i
        else
    ( Z5 `. u. c" B7 c! c! ~        fuhe = 1! i2 A9 i4 |$ }( j7 K; N
        end   
    ! M( t. E7 b# k8 _0 Q/ l  G" n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2+ D, {6 g( Q$ g& ^1 V1 S
         1     2     3     6     2     2     1     4     3     1     5     3     1$ t- h5 i1 U; B4 f
         1     2     3     1     2     5     1     2     4     1     2     3     28 }7 s' h$ @9 R1 S8 E% i
         1     2     7     1     2     2     1     2     5     1     2     4     1" Q1 y' F; @- B4 {) I! t* _
         5     2     3     3     5     2     1     2     3     1     2     3     6
    5 a% i8 T0 x4 R& m0 ]# S1 h( l     1     2     3     1     2     2     1     6     5     1     2     6     49 N; [4 F8 ~4 t7 O: _- ]
         5     2     3     4     4     2     1     2     3     1     2     5     6
    ! C6 I0 g6 A% u6 Z  }     1     2     6     1     2     2     1     2     3     1     4     3     2* `5 I  B2 K  w3 @
         1     2     3     4     2     7     1     4     3     1     7     3     34 n; n& r% B* C
         5     2     3     5     2     2     1     2     3     1     2     3     4% y) H3 k7 R6 M0 u* X
         5     2     4     1     2     2     5     2     3     7     1     6     2
      t/ z0 w% Z0 t- a5 E1 \
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    5 ^4 F9 O; }! u     1     2     3     6     2     2     1     4     3     1     5     3     1
    & p% T6 y% j( `' t# K( I     1     2     3     1     2     5     1     2     4     1     2     3     2
    8 U: |, F0 M. M+ Z7 V/ X5 }* F     1     2     7     1     2     2     1     2     5     1     2     4     1! F1 h: p1 r! n2 _: X, q
         5     2     3     3     5     2     1     2     3     1     2     3     6
    1 r/ ]* x2 q5 P% G. D; {. V9 f% @     1     2     3     1     2     2     1     6     5     1     2     6     4
    ' I3 l+ x$ k2 \/ a4 H6 U/ t     5     2     3     4     4     2     1     2     3     1     2     5     6
    1 b  P- Z3 W+ |. K: }( a     1     2     6     1     2     2     1     2     3     1     4     3     2
    $ V# O6 V: {; }+ Z     1     2     3     4     2     7     1     4     3     1     7     3     3
    0 B; l9 D) [  v     5     2     3     5     2     2     1     2     3     1     2     3     4( a: T: d% K7 U/ I
         4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    * Q  @  d2 T; c/ e& xiteration 2, loglik = -238.2598122 K3 A  f9 C+ ^1 _0 c* {8 X
    iteration 3, loglik = -232.9629484 }: x( v5 _  Q9 H& t1 R8 U
    iteration 4, loglik = -223.323891
    3 [9 d3 q3 K- D$ ~iteration 5, loglik = -207.630875
    & H8 i* E3 M3 s# Qiteration 6, loglik = -191.0126977 b0 w5 v* u& z; k# g+ P
    iteration 7, loglik = -178.611546
    . F; d; h0 f, C, Niteration 8, loglik = -171.524132/ ?; `: b+ M- ~# ]0 H# w% ^
    iteration 9, loglik = -168.626526
    / h3 _  |8 l( N2 h  Biteration 10, loglik = -167.3870571 A$ y5 {' w( \9 o9 M! `
    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
    / o& q% Y$ m6 d) L- y& ^( O
    prior2 =
        0.0000+ Y7 O4 f# P( D+ w9 G7 T. s
        0.0000$ Y/ C- c: D. Q* z
        1.0000- r1 N! b+ H: n% L! x5 [. f
        0.0000
    ! d" T1 R' L( S    0.0000

    / J+ Y- }+ b( y: v1 A$ B$ wtransmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    / ]/ H% ^0 U/ ^    0.7811    0.0000    0.0199    0.0067    0.1923
    ; e9 E! I3 c# ^& @4 |) F. E! L    0.0000    0.9936    0.0000    0.0064    0.00006 _% j0 E& k  K" N& B0 Y+ ?
        0.1686    0.2604    0.2242    0.3398    0.0070
    ; n/ s9 t( `" g+ ?4 X    0.0053    0.0406    0.8350    0.1184    0.0007
    6 q, ?/ n1 V, Z- E4 D
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351: A# e: l8 G1 O: F1 a& p6 I. D
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228
    , ~; l+ M8 o4 w( R# `7 e& y    0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.0000
    $ B$ x8 a! ]' Q4 E1 y" w    0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055
    5 `+ D  y4 ?2 ]    0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.738670
    . i9 u. ?: j, T7 A1 V- yiteration 2, loglik = -242.163247- B0 ~5 W6 W+ A) D0 _0 W9 [5 J) k( O
    iteration 3, loglik = -238.321971" o4 P" D! z% ]$ q" W% K4 f9 O
    iteration 4, loglik = -233.166746) R& V; K/ w+ s1 t" Q
    iteration 5, loglik = -225.682259: f( f8 G! I" r9 Y
    iteration 6, loglik = -214.560296
    3 ?# Z. I# z2 W9 c7 s: X/ K8 ^iteration 7, loglik = -201.182015
    6 }* ~4 `9 {$ F" n4 Fiteration 8, loglik = -189.4274534 {" u+ \4 `+ z. e7 B5 u
    iteration 9, loglik = -179.156352# [# m* [$ [$ P( B/ T! i
    iteration 10, loglik = -171.7440967 }4 h$ t. A& X( l( M' X
    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
    $ B. I. s$ H, i! ?% x
    prior4 =
        0.00004 Z' H$ n  g; R9 h$ _  G: K
        0.9982- S; H# G4 \) f5 X* \
        0.0004, {) T' a- q7 ?4 U2 R. Q9 i
        0.0014
    8 |# V( @' U8 ]  o    0.0000
    9 N2 K: V# T5 e# r7 b0 `9 g
    transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    3 r  h$ H# @* ^0 @5 _: [9 a* g9 r    0.0002    0.0000    0.0005    0.0000    0.99940 p% I/ {0 Z9 H$ Z
        0.0180    0.0000    0.0118    0.0011    0.9692
    ) E# n. l4 L8 y# W* k& M3 L' a    0.0436    0.0226    0.0810    0.0219    0.83108 k$ K( k: [* l- y/ G
        0.9746    0.0056    0.0003    0.0195    0.0000
    * O/ A" c4 Y+ l* G
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770
    * O) j1 _2 U3 d  F+ r    0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    ( b( P1 L" x& n. I    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.0001
    & v$ C& v( s5 t) X    0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    2 K: @/ F/ c) @% x! `& }4 b    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225

    6 }, T- T( g. {# a# u( |data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2
    % h: }& s; O, W0 Q. W+ E, {% v7 Z
    loglik =
      -19.2351
    1 L7 F9 v/ b# l' w5 g7 n
    loglik2 =
      -21.0715

    7 m' I$ j/ N* x" g+ |path =
         3     2     5     3     2     1     3     2     1     5     3     2     1
    ; q! \) I8 y' h
    path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1

    ' n5 n9 w# T  ]3 w5 W! Vfuhe =
         1
    $ a. B- ]6 E+ [6 t  E' j
    . E5 |, ~0 a) m! T
    0 K6 D: E5 c+ 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-11 22:11 , Processed in 0.453021 second(s), 54 queries .

    回顶部