zoukankan      html  css  js  c++  java
  • matlab隐马尔可夫相关函数简单例子实现(help文档)

    %参考:matlab help 文件
    %例子中:状态变量为离散分布,值域为{'fair','loaded'};观测变量为离散分布,值域为{'one','two','three','four','five','six'}
    %符号说明:
    %states: 隐变量序列;
    %seq:观测变量系列;
    %tr:状态转移矩阵;
    %e:发射矩阵;
    %% hmmgenerate函数  
    tr = [0.95,0.05;                            %状态转移矩阵tr [2x2]
          0.10,0.90];
               
    e = [1/6,  1/6,  1/6,  1/6,  1/6,  1/6;     %发射矩阵e 的维度 o=b'*i; [6x1]=[6x2]'x*[2x1];
         1/10, 1/10, 1/10, 1/10, 1/10, 1/2;];   
     
    [seq, states] = hmmgenerate(100,tr,e);      %100个时间序列单元
    % [seq, states] = hmmgenerate(100,tr,e,'Symbols',...    %设置隐变量2个可能取值的名称和观测变量6个可能取值的名称
    %           {'one','two','three','four','five','six'},...
    %            'Statenames',{'fair';'loaded'});
    %% hmmviterbi函数
    % estimatedStates = hmmviterbi(seq,tr,e);  %利用viterbi算法求解HMM的decoding问题P(Z|X),在本例中大概能够达成70%及以上的识别准确率,这是利用有监督的方式,如果是无监督,验证模型有效的指标是什么?
    % %查看识别准确率命令:length(find(states==estimatedStates))
    % [seq, states] = hmmgenerate(100,tr,e,'Statenames',{'fair';'loaded'});
    % estimatesStates = hmmviterbi(seq,tr,e,'Statenames',{'fair';'loaded'});
    % %查看识别准确率命令:length(find(strcmp(states,estimatesStates)))
    %% hmmdecode函数
    pStates = hmmdecode(seq,tr,e);             %p矩阵为[2x100]的矩阵,每一列表示一个时间序列单元对应的隐变量服从的离散概率分布
    % %以下为验证decoding出的概率分布与原始的真实state的值相符合的程度,即验证hmmdecode的有效性
    % deco_1index=find(sign(pStates(1,:)-0.5)>0);
    % real_1index=find(states==1); 
    % count=0;
    % for i=1:length(real_1index)
    %     for j=1:length(deco_1index)
    %     if real_1index(i)==deco_1index(j)
    %         count=count+1;
    %     end
    %     end
    % end
    % %得到混淆矩阵参数
    % tp=count;  %true positive     tp=57;
    % fp=length(deco_1index)-count; %fp=72-57=15;
    % fn=length(real_1index)-count; %fn=65-57=8;
    % tn=length(seq)-length(real_1index)-fp; %tn=100-65-15=20
    % accuracy=(tp+tn)/(tp+tn+fp+fn); %准确率=0.7700
    % %也可根据confusion_matrix自行计算对应的二级指标,比如召回率,F1指标等等,详见另一篇博客:分类模型评价指标
    %
    % [seq, states] = hmmgenerate(100,tr,e,'Symbols',...
    %           {'one','two','three','four','five','six'});
    % pStates = hmmdecode(seq,tr,e,'Symbols',...
    %           {'one','two','three','four','five','six'});
    %% 区别hmmestimate和hmmtrain
    % hmmestimate已知state和seq,求模型参数tr,e
    % hmmtrain已知seq,估计参数tr,e
    %% hmmestimate函数
    [estimateTR, estimateE] = hmmestimate(seq,states);    %已知隐变量序列和观测变量序列,估计参数
    %% hmmtrain函数
    seq1 = hmmgenerate(100,tr,e);
    seq2 = hmmgenerate(200,tr,e);
    seqs = [seq1,seq2];                    %也可以换成seqs = {seq1,seq2}; 
    [estTR, estE] = hmmtrain(seqs,tr,e);   %tr,e是tr和e的初始概率分布(时刻0到时刻1)
     
    t->t+1 s1 s2
    s1 0.95 0.05
    s1 0.10 0.90

      状态转移矩阵

      o1 o2 o3 o4 o5 o6
    s1 1/6 1/6 1/6 1/6 1/6 1/6
    s2 1/10 1/10 1/10 1/10 1/10 1/2

    发射矩阵(还是发射矩阵的转置?,由于o=b*s=> [6x1]=[6x2]*[2x1])

    实际-预测 “1” “2”
    “1” TP FN
    “2” FP TN

         二分类的混淆矩阵形式

  • 相关阅读:
    Linux操作_常用命令操作练习
    Linux编程_Shell脚本练习题
    Linux操作_grep/egrep工具的使用
    Linux中的链接文件_软链接和硬链接
    Linux操作_磁盘管理_增加虚拟磁盘
    Linux命令_磁盘管理_查看磁盘或目录的容量
    Linux命令_用户身份切换
    使用Unity中的Box Collider组件完成游戏场景中的碰撞检测功能
    在Unity场景中更改天空盒的步骤
    Linux命令_用户和用户组管理
  • 原文地址:https://www.cnblogs.com/feynmania/p/13398283.html
Copyright © 2011-2022 走看看