HMM TOOL

HMM隐马尔科夫模型 MATLAB 工具包对各种数据的处理

HMM 工具包下载地址:

http://www.cs.ubc.ca/~murphyk/Software/HMM/hmm.html

工具包使用说明:

http://www.cs.ubc.ca/~murphyk/Software/HMM/hmm_usage.html

接下来简单叙述一下如何写data

1、data是一维数据、每一组训练样例序列长度一致。

O = 3;
Q = 2; 
prior0 = normalise(rand(Q,1)); 
transmat0 = mk_stochastic(rand(Q,Q));
obsmat0 = mk_stochastic(rand(Q,O));

%Now we sample nex=20 sequences of length T=10 each from this model, to use as training data.

T=10;
nex=20;
data = dhmm_sample(prior0, transmat0, obsmat0, nex, T);

%Here data is 20x10. Now we make a random guess as to what the parameters are,

prior1 = normalise(rand(Q,1)); 
transmat1 = mk_stochastic(rand(Q,Q));
obsmat1 = mk_stochastic(rand(Q,O));

%and improve our guess using 5 iterations of EM...

[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, ‘max_iter‘, 5);


loglik = dhmm_logprob(data, prior2, transmat2, obsmat2)
%loglik 即用来预测测试数据的相似程度 越大越相似 0为最大
2、data是多维数据、每一组训练样例序列长度一致。
%Let us generate nex=50 vector-valued sequences of length T=50; each vector has size O=2.

O = 2; 
T = 50; 
nex = 50; 
data = randn(O,T,nex);
%Now let use fit a mixture of M=2 Gaussians for each of the Q=2 states using K-means.
M = 2;
Q = 2; 
left_right = 0; 
 prior0 = normalise(rand(Q,1)); 
transmat0 = mk_stochastic(rand(Q,Q)); 
[mu0, Sigma0] = mixgauss_init(Q*M, reshape(data, [O T*nex]), cov_type);
 mu0 = reshape(mu0, [O Q M]); 
Sigma0 = reshape(Sigma0, [O O Q M]);
mixmat0 = mk_stochastic(rand(Q,M));


%Finally, let us improve these parameter estimates using EM.
[LL, prior1, transmat1, mu1, Sigma1, mixmat1] = mhmm_em(data, prior0, transmat0, mu0, Sigma0, mixmat0, ‘max_iter‘, 2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
说明这里的数组格式是O*T*nex举个例子这个数组是怎么存的
 data0=[x,y,z];data0 是三维数据,供T*nex行,1~T行为nex=1的数据,T+1~2*T行为nex=2的数                %据,以此类推



 data = randn(O,T,nex);
 index=1;
  for k=1:nex
     for j=1:T
         data(:,j,k)=data0(index,:);
         index=index+1;
    end
end 
%按照上述这样将data0写入data即可
%新的数据查看与这个模型的相似程度,即分类
loglik = mhmm_logprob(data, prior, transmat, mu, Sigma, mixmat);
3、data是多维数据、并且每一组训练样例序列长度一致,即HMM如何处理长度不一致数据。
这种情况还是很常见的,例如采集一组连续语音信号,但每次采集得到的长度(帧数)不一致。
假如数据维度为O维,帧数为T(每一组肯能都不一致),NEX为训练数据数目。
步骤1、按照O*T存成NEX行cell类型数据(这里命名为cell_data),例如我的cell_data截图

我的单个数据为8维,供4组训练数据,每一组训练数据取得序列长度不一致。
步骤2、训练代码
    O = 8;%维度
    M = 2;
    Q = 3;
    train_num = 4;
    data =[];


    % initial guess of parameters
   cov_type = ‘full‘;
    % initial guess of parameters
    prior0 = normalise(rand(Q,1));
    transmat0 = mk_stochastic(rand(Q,Q));
    for train_len = 1 : train_num
        data = [data(:, 1 : end), cell_data{train_len}];
    end
    
    [mu0, Sigma0] = mixgauss_init(Q*M, data, cov_type);
    mu0 = reshape(mu0, [O Q M]);
    Sigma0 = reshape(Sigma0, [O O Q M]);
    mixmat0 = mk_stochastic(rand(Q,M));
    [LL, HMM.prior, HMM.transmat, HMM.mu, HMM.Sigma, HMM.mixmat] = ...
时间: 2024-11-25 11:42:45

HMM TOOL的相关文章

理解隐马尔科夫(HMM)模型

前言 在李航的<统计学方法>第十章有对隐马尔科夫模型(Hidden Markov Model,HMM)比较详细的介绍和推导公式,我参考公式结合中文分词应用实现了隐马模型观测序列的生成.前向算法.维特比算法. 本文在此针对HMM模型在中文分词中的应用,讲讲实现原理.我尽可能的撇开公式,撇开推导.结合实际开源代码作为例子,争取做到雅俗共赏,童叟无欺. 没有公式,就没有伤害. 理解一个算法,我认为需要做到:会其意,知其形.本文回答的,其实主要是第一点.但是这一点呢,恰恰是最重要,而且很多书上不会讲的

在Eclipse mars 4.5.2 中安装spring 插件 spring tool suite

最近在学习spring,用到的IDE 有eclipse,也有用到 IDEA. 目前对spring还不是很了解,跟着网上的视频来,先学会了spring,然后再选IDE. 题归正转,下面说说怎么在Eclipse mars 4.5.2 中安装spring 插件 spring tool suite. 打开eclipse,然后在菜单栏中点击Help,选中Eclipse MarketPlace: 然后搜索STS(也就是spring tool suite的缩写),回车: 点击Install即可 由于是在线安装

安装Spring Tool Suite(STS)

JAVA开发工具中,常用工具就是Eclipse,IntelliJ IDEA. 现在使用spring boot&cloud框架进行开发的时候,虽然可以使用上面两个工具,但都未必就真的量身定制,IntelliJ虽说是神器,但太重,而且是收费的,免费的社区版也是一个阉割版.Eclipse当然ok,但要装一些插件. Spring官方出品的基于Ecplise的为spring boot&cloud量身打造的工具Spring Tool Suite是一款免费的非常合适的开发工具. STS的安装也非常简单,

算法:HMM模型+维特比算法详解

一.HMM模型+维特比算法实例 1.问题描述 假设连续观察3天的海藻湿度为(Dry,Damp,Soggy),求这三天最可能的天气情况. 2.已知信息 ①天气只有三类(Sunny,Cloudy,Rainy),海藻湿度有四类{Dry,Dryish, Damp,Soggy },而且海藻湿度和天气有一定的关系. ②隐藏的状态:Sunny, Cloudy, Rainy; ③观察状态序列:{Dry, Damp, Soggy} ④初始状态序列: Sunny Cloudy Rainy 0.63 0.17 0.2

一文搞懂HMM(隐马尔可夫模型)

本文转自于:http://www.cnblogs.com/skyme/p/4651331.html 隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程.其难点是从可观察的参数中确定该过程的隐含参数.然后利用这些参数来作进一步的分析,例如模式识别. 是在被建模的系统被认为是一个马尔可夫过程与未观测到的(隐藏的)的状态的统计马尔可夫模型. 下面用一个简单的例子来阐述: 假设我手里有三个不同的骰子.第一个骰子是我们平常见的骰子(称这

隐马尔可夫模型(HMM)总结

摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项(算法过程,调参等注意事项) 5.实现和具体例子 6.适用场合 内容: 1.算法概述 隐马尔科夫模型(Hidden Markov Model)是关于时序的概率模型,描述由一个隐含的马尔科夫链生成不可观测的状态序列,再由状态序列生成观测序列的过程.这种通过观测序列预测隐含的标记序列的问题叫做标注. 下图来自维基百科: 并且本文有如下符号表示: 其中就是我们需要求得的一个三元组:拿中文分词的例子来说,分词中的状态序列是{ Begi

HMM的维特比算法简单示例

今天读了一位大牛的关于HMM的技术博客,读完之后,写了一个关于维特比算法的简单示例,用scala和java语言混合编写的.现在上传之. package com.txq.hmm import java.utilimport scala.collection._ /** * HMM维特比算法,根据显示状态链条估计隐式链条 * @param states 隐式states * @param observations 显式states * @param start_probability 初始概率向量

Spring Boot基础教程1-Spring Tool Suite工具的安装

1.工具下载地址: Eclipse:http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/neonr Spring Tool Suite:https://spring.io/tools/sts/all 2.使用版本为: Eclipse:eclipse-jee-neon-R-win32-x86_64.zip Spring Tool Suite:springsource-tool-suite-3.8.0.RE

HMM,MEMM,CRF模型

HMM,MEMM,CRF模型之间关系密切,需看: 参考文献: http://www.cnblogs.com/kevinGaoblog/p/3874709.html http://baike.baidu.com/link?url=3BRZ5qo58-3MaGzPqI7zWhcqNY-0xfjUf79AMDLsv1gHK2JXp2lEZ53KuL56kmJVxlT0hTydmGHXnaAnFqoy1q