MATLAB 的 hmmtrain 假定初始状态为 1

标签 matlab hidden-markov-models

MATLAB 统计工具箱函数 hmmtrain.m 似乎假设模型在训练序列之前最初处于状态 1。有什么办法可以关闭这个“功能”吗?一个例子:

>> y = [ 3 3 1 2 3 ];
>> H = eye( 3 );
>> T = ones(3)/3;
>> [ T, H ] = hmmtrain( y, T, H )

T =

         0    0.5000    0.5000
         0         0    1.0000
    0.5000         0    0.5000


H =

     1     0     0
     0     1     0
     0     0     1

训练集不包含从 1 到 3 的转换。为什么 T(1,3) 非零?!

最佳答案

我为 hmmtrain 编写了以下包装函数,它创建了一个仅用于模型初始状态的特殊状态 1。从外部调用者的角度来看,它不存在,您只能获得训练序列符号之间转换的统计信息;它对系统的初始状态一无所知。

  % MYHMMTRAIN - Wrapper on HMMTRAIN that removes "initial state" effects

  function [ T, H ] = myhmmtrain( y, T, H, varargin )

  % hmmtrain assumes the system always starts in state 1, 
  % so we create a "state 1" that isn't used for anything else
  N = size(T,1);
  T = [ 0           ones(1,N)/N; ...
        zeros(N,1)  T ];
  M = size(H,2);
  H = [ zeros(1,M); H ];

  % train
  [ T, H ] = hmmtrain( y, T, H, varargin{:} );

  % remove false state 1
  T = T(2:end,2:end);
  H = H(2:end,:);

  end

关于MATLAB 的 hmmtrain 假定初始状态为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9788463/

相关文章:

r - 边界处估计的概率是什么意思?使用 depmixS4 包的 R 中的隐马尔可夫模型

opencv - 手势/姿势识别的特征提取方法

arrays - 连接单元格

matlab - matlab中的垂直反射?

matlab - 在 MATLAB 中,给定一些十进制数,有什么有效的方法可以找到自定义浮点二进制的尾数和指数的最小长度?

algorithm - 三面骰子的隐马尔可夫模型

arrays - 在matlab中查找数组中遵循某个值的元素

matlab - 将代码转换为自定义 PDF

machine-learning - 隐马尔可夫模型 : Is it possible that the accuracy decreases as the number of states increases?

r msm BLAS/LAPACK 例程 'DGEBAL' 给出了错误代码 -3