【问题标题】:Estimate Markov Chain Transition Matrix in MATLAB With Different State Sequence Lengths在 MATLAB 中估计不同状态序列长度的马尔可夫链转移矩阵
【发布时间】:2016-06-11 01:25:20
【问题描述】:

我正在尝试在 MATLAB 中为马尔可夫链构建转移矩阵;我有几个不同的观察序列(所有不同的长度),我需要使用它们生成转换矩阵。

Constructing a multi-order Markov chain transition matrix in Matlab 向我展示了如何使用单个观察序列构建转移矩阵。

如何使用不同长度的观察来构造一个?一个例子可以是一个序列是 1,2,3,4 而另一个是 4,5,6。有什么方法可以做到这一点,而不必遍历所有序列和计算计数?

【问题讨论】:

    标签: matlab probability transitions hidden-markov-models markov-chains


    【解决方案1】:

    所以对于马尔可夫链,我假设您只对状态转换感兴趣。您可以将所有状态转换分组到一个 Nx2 矩阵中,然后计算一行出现的次数。

    在本例中,我使用长度为 4、3 和 3 的三个观测值。我可以使用 cellfun 将所有状态转换按以下方式分组到一个矩阵中:

    obs = cell(1, 3);
    
    obs(1) = {[1 2 3 4]};
    obs(2) = {[4 5 6]};
    obs(3) = {[3 4 5]};
    
    transitions = cellfun(@(x)([x(1:length(x)-1); x(2:length(x))]), obs, 'UniformOutput', false);
    
    alltransitions = cell2mat(transitions)';
    

    这给了我观察到的转换(1->2, 2->3, 3->4 ...)

    alltransitions =
    
         1     2
         2     3
         3     4
         4     5
         5     6
         3     4
         4     5
    

    要设置转换矩阵,您可以采用此处列出的建议,并计算所有转换的行数:

    http://www.mathworks.it/matlabcentral/answers/75009-i-ve-a-matrix-of-6x4-and-i-want-to-count-the-rows-how-many-times-it-occur-in-a-matrix

    [uniqueTransitions, ~, i]=unique(alltransitions,'rows','stable');
    v=arrayfun(@(x) sum(i==x),1:size(uniqueTransitions,1))';
    p = v/sum(v);
    

    我的向量 p 包含我的转移概率,所以我可以继续构造一个稀疏矩阵

    transitionMatrix = sparse(uniqueTransitions(:,1), uniqueTransitions(:,2), p, 6,6)
    

    导致:

    transitionMatrix =
    
       (1,2)       0.1429
       (2,3)       0.1429
       (3,4)       0.2857
       (4,5)       0.2857
       (5,6)       0.1429
    

    【讨论】:

      【解决方案2】:

      这可能是计算给定数据序列(一个向量)的转移概率矩阵 (TPM) 的更简单方法,如下所示:

      myS = {S1,S2,S1,S3,...} 拥有尽可能多的状态;

      TPM = hmmestimate(myS,myS);

      hmmestimate 函数在 MATLAB 的隐藏马尔可夫模型下定义。

      【讨论】:

      • 当您有多个向量时,hmmestimate 是否有效?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多