如何找到马尔可夫链(FSMC)的有限状态转移概率矩阵

时间:2013-05-03 13:52:31

标签: matlab markov-chains

我的通道测量值为> 20,000,必须分为不同的级别,在我的情况下K = 8,并且必须映射到具有状态的信道测量。我必须在Matlab中找到状态转移概率矩阵。

我的问题是,我需要知道如何将这些值分成8个状态,并在Matlab中找到这8个状态的状态转移概率矩阵。

1 个答案:

答案 0 :(得分:1)

以下是一个简单的例子:

%# some random vector (load your data here instead)
x = randn(1000,1);

%# discretization/quantization into 8 levels
edges = linspace(min(x),max(x),8+1);
[counts,bins] = histc(x, edges);

%# fix last level of histc output
last = numel(counts);
bins(bins==last) = last - 1;
counts(last-1) = counts(last-1) + counts(last);
counts(last) = [];

%# show histogram
bar(edges(1:end-1), counts, 'histc')

%# transition matrix
trans = full(sparse(bins(1:end-1), bins(2:end), 1));
trans = bsxfun(@rdivide, trans, sum(trans,2));

有几点需要注意:

  • 简单地通过将整个数据范围划分为8个区来执行离散化。这是使用histc完成的。请注意,由于函数的工作方式,我们必须合并最后两个计数并相应地修复二进制文件。

  • 通过首先使用sparse函数的鲜为人知的调用形式对共现进行计数来计算转移矩阵。也可以使用accumarray。然后对计数矩阵进行归一化以获得总和为1的概率。

  • 您提到您的MC模型应该只允许相邻状态之间的转换(1到2或8到7,但不在2到5之间)。我没有强制执行这个事实,因为这应该是数据本身的属性,在本例中随机数据不适用。