QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 950|回复: 0
打印 上一主题 下一主题

隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱

[复制链接]
字体大小: 正常 放大
杨利霞        

5250

主题

81

听众

16万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2020-5-9 17:36 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    * C: ]2 K  T7 c+ y" u& [隐马尔科夫HMM在matlab实现的两个例子如何读懂,附HMM工具箱
    6 B6 b; A& H8 t" R/ @( `
    % ①定义一个HMM并训练这个HMM。; Q; c+ N8 F( K' E  l7 U4 b7 ?9 P
    % ②用一组观察值测试这个HMM,计算该组观察值域HMM的匹配度。0 Z( N7 X  O6 Z* D* p7 J- w
    % 修改:旺齐齐4 Y0 G+ b7 W" Z
    % 修改部分为:添加 HMM2 模型。测试一个观察序列更加符合哪个哪个HMM模型。  g% t/ l$ G9 w% n* O: M+ g3 o9 g
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % O:观察状态数: T& c$ b) p5 e/ G2 m
    O = 7;
    9 V$ R7 w) N0 X) S4 Q; S) @9 NO2 = 7;
    1 R" j5 w; D+ A, Q9 R% Q:HMM状态数
    2 L4 }$ J; b5 V0 n, A8 IQ = 5;
    $ ]9 f- Z% |- xQ2 = 5;
    , r4 [$ ]: A' d%训练的数据集,每一行数据就是一组训练的观察值
    0 N$ m$ J+ Y' ]6 Y/ b3 A# v- gdata=[1,2,3,1,2,2,4,2,3,1,2,7,2;
    # U8 m- ]& [( [4 i' |      1,2,3,6,2,2,1,4,3,1,5,3,1;
    ; ?5 M" ]: y  j- I3 [      1,2,3,1,2,5,1,2,4,1,2,3,2;
    5 G( V" y! Z: E' @' k8 e      1,2,7,1,2,2,1,2,5,1,2,4,1;( w. W- U, _* S+ D7 w
          5,2,3,3,5,2,1,2,3,1,2,3,6;6 g& \! }% Y' u7 F; u* K, }0 A
          1,2,3,1,2,2,1,6,5,1,2,6,4;% }" U& ]2 |" i8 c/ s0 e' R2 L
          5,2,3,4,4,2,1,2,3,1,2,5,6;$ s" ]- T. E+ u. f. r
          1,2,6,1,2,2,1,2,3,1,4,3,2;" E' S# ^/ x( b8 t
          1,2,3,4,2,7,1,4,3,1,7,3,3;. V) Y/ \8 ^7 y5 G
          5,2,3,5,2,2,1,2,3,1,2,3,4;
    7 E3 R% A: t) @      5,2,4,1,2,2,5,2,3,7,1,6,2;]

    : j6 r/ Y* o' n8 U: t  data2 = [1,2,3,1,2,2,4,2,3,1,2,7,2;
    ; o: P% z5 O3 ]* K          1,2,3,6,2,2,1,4,3,1,5,3,1;6 v: f  l# I/ n6 H) w
              1,2,3,1,2,5,1,2,4,1,2,3,2;/ m/ v) T3 F7 B) D* c
              1,2,7,1,2,2,1,2,5,1,2,4,1;9 _& y, A1 G/ s, k3 i- Q* Y
              5,2,3,3,5,2,1,2,3,1,2,3,6;
    3 y% z, R* |* e  ]/ R          1,2,3,1,2,2,1,6,5,1,2,6,4;2 l. o2 P4 b$ P# _4 \
              5,2,3,4,4,2,1,2,3,1,2,5,6;
    9 }# U6 t" g9 x+ C# Z5 ~, B, s! m          1,2,6,1,2,2,1,2,3,1,4,3,2;
    3 p( Z) w) X) i, ]( P# h6 N          1,2,3,4,2,7,1,4,3,1,7,3,3;' O# ^3 Y5 K) c2 Q" Z+ t2 l/ O5 F  H
              5,2,3,5,2,2,1,2,3,1,2,3,4;
    ; K" G7 H! L5 H/ B# B; U8 Z          4,2,5,1,2,2,6,2,3,7,1,6,4;]
    % initial guess of parameters# i* j" [- s$ I$ U8 H6 W
    % 初始化参数/ a, B0 w. ^" T& W& ]1 s; H- Z' _  d, U
    prior1 = normalise(rand(Q,1));
    ; }4 b3 P$ G( T2 i6 @  qtransmat1 = mk_stochastic(rand(Q,Q));
    , @, w0 B+ ^! \0 i$ k7 Nobsmat1 = mk_stochastic(rand(Q,O));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    * K/ N! D* Z( b4 @# _2 d% 添加部分: y- {$ Q: N- @& k* v% `( k
        prior3 = normalise(rand(Q2,1));+ N/ G2 V9 p$ U* G* W3 Z7 s) r
        transmat3 = mk_stochastic(rand(Q2,Q2));8 J  h  q7 i$ }
        obsmat3 = mk_stochastic(rand(Q2,O2));" V" D8 v% W& ?
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % improve guess of parameters using EM5 L5 C9 _- ~# t$ j8 V. {; w" \
    % 用data数据集训练参数矩阵形成新的HMM模型2 X. `: ?$ o9 a. C# O
    [LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', size(data,1));
    9 S3 X. P2 s! U& o; z/ z8 r% 训练后那行观察值与HMM匹配度
    : _. _! |/ F1 f0 y; ^3 BLL
    " o* k0 B; d8 }! `$ K% 训练后的初始概率分布( d3 S, m% ]9 A9 Z% b$ s
    prior2
    ; n4 |" I( Q3 a, B4 S% T$ x% 训练后的状态转移概率矩阵
    $ j+ M. I% i& M& F1 G3 [transmat2* |: G$ }  H' {4 o" K- z
    % 观察值概率矩阵
    $ }) c+ P% R2 B5 a; Aobsmat2
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' e3 n+ Q2 U7 T# q& A: D5 f9 m
    % 添加部分( A- H/ J7 Z8 {( z9 z+ L! t# I
        [LL2, prior4, transmat4, obsmat4] = dhmm_em(data2, prior3, transmat3, obsmat3, 'max_iter', size(data2,1));- H0 u! [5 W1 L
        LL2
    : @1 Q! L0 V9 O0 Z$ |4 Q    prior49 H9 D  _& Y* I& g
        transmat4, z: I6 ^; G0 k
        obsmat4
    - I6 q* b+ F0 N% t: s) S%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % use model to compute log likelihood
    5 p! t; J" \/ u: @9 \' n: k% data1=[1,2,3,1,2,2,1,2,3,1,2,3,1]
    . J0 Q" p; M8 tdata1 = [5,2,4,1,2,2,5,2,3,7,1,6,2]& I0 b0 A6 |+ F: }
    loglik = dhmm_logprob(data1, prior2, transmat2, obsmat2)
    $ X5 T1 h& }: [; k0 ?# |+ s% log lik is slightly different than LL(end), since it is computed after the final M step
    / i& X* A6 C; L% loglik 代表着data和这个hmm(三参数为prior2, transmat2, obsmat2)的匹配值,越大说明越匹配,0为极大值。
    % path为viterbi算法的结果,即最大概率path
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  q8 Z/ {0 Y" _( l( [( J- ?9 K
    % 添加部分
      V+ W4 q% r, Gloglik2 = dhmm_logprob(data1, prior4, transmat4, obsmat4)
    7 F# v$ o- m' n3 `- n) Q8 @8 x* l  \%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    9 _5 F+ l6 \5 ~$ [/ ^- R
    B = multinomial_prob(data1,obsmat2);; K- t% U7 I- h: j8 o& Z* e
    path = viterbi_path(prior2, transmat2, B)- X4 p& c2 `4 i
    save('sa.mat');

    ( G& f$ [, j) X) ?- l%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3 ?( G+ Y: r1 u' ]
    % 添加部分0 r$ U, }' t+ H2 V8 p
        B2 = multinomial_prob(data1,obsmat4);1 h. u& d; ~  S. |0 Y% e6 R
        path2 = viterbi_path(prior4, transmat4, B2)
    $ K; a3 t9 C8 v8 X    save('sa2.mat');
    & [* U7 ]3 d1 \    if loglik2 > loglik 5 h% E& A7 Z5 }' V
            fuhe = 2
    7 K2 H' o# l9 w. v    else
    & W) C3 C, n- T) H: A' _) \& ~* T) J        fuhe = 1
    9 S7 Q* O& X* R    end   
    9 J+ O+ g3 Z! y! P%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ------
    运行结果
    ------
    data =
         1     2     3     1     2     2     4     2     3     1     2     7     2- J, l% R9 D; r8 E' x
         1     2     3     6     2     2     1     4     3     1     5     3     1
    - m; h3 |# _) b( c( q2 G     1     2     3     1     2     5     1     2     4     1     2     3     2
    4 }- y0 Z" j  g3 B3 r2 o$ x: A7 K     1     2     7     1     2     2     1     2     5     1     2     4     1; V5 g- ~* h& d; S& I- V. c
         5     2     3     3     5     2     1     2     3     1     2     3     68 e* s" I/ g: J; }' G$ y
         1     2     3     1     2     2     1     6     5     1     2     6     4
    $ h8 Z- N: C) i; s5 ^. e! e     5     2     3     4     4     2     1     2     3     1     2     5     6  `+ [2 a) k4 Q( G
         1     2     6     1     2     2     1     2     3     1     4     3     2
    ' `7 _' ~. D! P% W& @0 K     1     2     3     4     2     7     1     4     3     1     7     3     3
    : R5 S  s; t/ _" Q, a2 f: a0 e     5     2     3     5     2     2     1     2     3     1     2     3     4& `  l2 E8 P0 a, {
         5     2     4     1     2     2     5     2     3     7     1     6     2
    # m) z/ }8 J) e8 S0 b- I
    data2 =
         1     2     3     1     2     2     4     2     3     1     2     7     2
    9 N* M- u3 g( d5 z: T% @" }     1     2     3     6     2     2     1     4     3     1     5     3     1/ e- N* n! i7 x. |. h2 [
         1     2     3     1     2     5     1     2     4     1     2     3     2
    : R& h, O1 q* E2 w7 n2 G     1     2     7     1     2     2     1     2     5     1     2     4     1
    8 c& G! K: S; _/ h     5     2     3     3     5     2     1     2     3     1     2     3     6; \2 y- B# \8 k5 ^/ D% c5 F- \
         1     2     3     1     2     2     1     6     5     1     2     6     4
    2 J# T: o# l) X/ O     5     2     3     4     4     2     1     2     3     1     2     5     6) p3 u4 S: A8 _0 V! V
         1     2     6     1     2     2     1     2     3     1     4     3     2
    9 L% V* @1 J! {; o6 A/ l     1     2     3     4     2     7     1     4     3     1     7     3     3
    ) E: Q, w% H: K% P7 G# G. j     5     2     3     5     2     2     1     2     3     1     2     3     4
    1 k% E9 w2 W! e1 x! h2 v: x# L     4     2     5     1     2     2     6     2     3     7     1     6     4
    iteration 1, loglik = -327.100465
    + g9 k0 j- P: f$ y, p; ~- Citeration 2, loglik = -238.259812
    * [2 S, r! ?: C# {" m  Y% Xiteration 3, loglik = -232.962948& o: s$ O. R# G# n; P
    iteration 4, loglik = -223.3238918 z  w3 f0 v' q# O3 @' F) Z
    iteration 5, loglik = -207.630875
    0 I+ J! I. f/ T' ]iteration 6, loglik = -191.012697$ m/ g- S, Y& D& U% l# Q
    iteration 7, loglik = -178.611546
    % d: t' l# |8 I$ f) }# Aiteration 8, loglik = -171.524132
    - J3 w4 h) ~# q. W  diteration 9, loglik = -168.626526
    " b" |$ t$ ^/ B7 Q! S- Q, Xiteration 10, loglik = -167.387057  B2 D7 i# g- b! s! i
    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

    : W- y- y" d0 m8 c9 D) ^( @* J8 cprior2 =
        0.0000* o# C5 T& p& Z& t0 E' s
        0.0000
    / w0 C/ N& V9 E4 d6 d( C    1.00007 x" J% V- Z7 j+ a8 C2 b: \' F, w
        0.0000
    # g. |+ t) D2 k8 c2 j    0.0000
    3 T1 [+ w/ _0 K' R4 t4 r6 j
    transmat2 =
        0.0138    0.0089    0.7680    0.1060    0.1033
    5 [2 @. e" s. }6 \' a" _  ]    0.7811    0.0000    0.0199    0.0067    0.1923+ V3 ]& a/ q9 S6 S% E4 h
        0.0000    0.9936    0.0000    0.0064    0.0000( t9 w: x6 B% t6 M
        0.1686    0.2604    0.2242    0.3398    0.0070
    & k8 n0 k* g! |8 Q" P9 f6 {. f    0.0053    0.0406    0.8350    0.1184    0.0007
    1 v5 ]6 ~- v# o% j) ^
    obsmat2 =
        0.0000    0.2351    0.5738    0.0256    0.1118    0.0186    0.0351& [' {7 N& v1 c, C. C- c
        0.0000    0.8270    0.0000    0.0790    0.0256    0.0456    0.0228$ @# Y% I" r# S, u$ @- J- k
        0.7514    0.0021    0.0011    0.0550    0.1472    0.0432    0.00008 a6 E, S# W4 G9 m( l( h& k2 ~
        0.0014    0.4208    0.0447    0.4366    0.0023    0.0887    0.0055" V0 m$ J! H* S3 w! m
        0.0000    0.0784    0.3223    0.2014    0.0116    0.1525    0.2338
    iteration 1, loglik = -277.7386709 a% s2 Z  e) X& E& w: ?8 R
    iteration 2, loglik = -242.163247
    0 m( M' [2 C9 Y* q" h: k8 ?iteration 3, loglik = -238.321971
      d4 p- i" b3 z9 @+ U! \$ \3 Titeration 4, loglik = -233.166746
    . n4 ?$ a1 A6 Iiteration 5, loglik = -225.682259/ F4 L+ X& N% i5 I) E) Y0 M: a5 c4 {  v
    iteration 6, loglik = -214.5602968 N2 m& c& C- V5 `, W" ?
    iteration 7, loglik = -201.182015  M  X" U/ V" w
    iteration 8, loglik = -189.427453
    / f) t% s7 A4 `0 a- m0 e! Riteration 9, loglik = -179.156352
      D3 w7 j! J2 X5 e% {. K/ Fiteration 10, loglik = -171.744096& J, i4 u7 B  w4 s# Z
    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! _7 D8 _% F) |  xprior4 =
        0.0000. f5 x! p/ K1 \: a9 M$ H
        0.9982
    + C4 J7 h6 E" r! ^0 m- s5 [( O    0.0004
    * g0 k' f* y& m, Y    0.0014! o+ l# {* M/ M, X0 m2 }6 m
        0.0000

    # `9 H9 U4 b4 P. c7 j- \transmat4 =
        0.0873    0.5277    0.2799    0.1007    0.0045
    & \2 g' M; W2 C& X    0.0002    0.0000    0.0005    0.0000    0.9994
    1 i/ k) B1 N  ^    0.0180    0.0000    0.0118    0.0011    0.96929 s$ o! M! g9 @9 `1 O* b
        0.0436    0.0226    0.0810    0.0219    0.8310' g9 y% u6 K/ f' S
        0.9746    0.0056    0.0003    0.0195    0.0000
    ' k! n* I3 ], b8 s  M6 g5 I
    obsmat4 =
        0.0000    0.2012    0.5080    0.0580    0.1093    0.0465    0.0770( n1 e8 l7 C: H/ V2 b; e4 s/ O9 ~0 ?. K/ p
        0.7939    0.0001    0.0000    0.0745    0.1277    0.0038    0.0000
    + H' K  m' X) g# [  Q    0.4120    0.1044    0.0049    0.1736    0.0032    0.3017    0.00019 {7 Q1 ~# @1 f: }% ^. D
        0.4527    0.0622    0.0637    0.2568    0.0549    0.0295    0.0802
    : o- u8 b& n- T: x, h$ {$ ^    0.0000    0.8172    0.0000    0.0943    0.0270    0.0389    0.0225
    6 Q% L1 y! q6 F/ j
    data1 =
         5     2     4     1     2     2     5     2     3     7     1     6     2

    8 a$ ]& o1 J* x9 i  X" U) `& j6 Tloglik =
      -19.2351

      e7 r, J* X. [: S; ]9 r! wloglik2 =
      -21.0715

    ! d6 f* y, E8 ?9 V4 S' Ppath =
         3     2     5     3     2     1     3     2     1     5     3     2     1

    & v) L( o2 a+ y: t( \* `path2 =
         2     5     1     2     5     1     2     5     1     1     2     5     1
    5 E" B# c2 M9 a& j
    fuhe =
         1

    1 N4 |4 G& J. m; _3 b" }8 w5 n/ q. m+ ?, A) ?6 j
    9 p8 Q2 O. S8 c# t& `2 V

    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, 2024-4-25 00:20 , Processed in 0.411573 second(s), 54 queries .

    回顶部