首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非常大、非常稀疏的马尔可夫转移矩阵

非常大、非常稀疏的马尔可夫转移矩阵
EN

Stack Overflow用户
提问于 2015-05-18 23:48:01
回答 2查看 1.2K关注 0票数 0

我有10个变量,有10个单独的状态(十进制),我正在尝试创建一个2D马尔可夫转移矩阵。这意味着10^10行和10^10列的矩阵,这将是非常稀疏的。这太大了,无法处理,但我希望有一种方法来处理稀疏矩阵,特别是稀疏转移矩阵。

如果你不熟悉,转移矩阵提供了在下一个时间步中从一个“状态”转移到另一个“状态”的概率。因为我有这么多变量,所以我必须得到从10D空间到2D空间的投影(如果你愿意的话)。例如,如果我有两个变量,每个变量都是正的或负的,我就会有2^2 =4的状态,++,--,+-,-+,这些就是行和列。这些值将是从行状态转移到列状态的一些概率。从一种状态转到另一种状态,在矩阵的那个位置产生零可能是不可能的。这将产生类似以下内容的结果:

代码语言:javascript
复制
           [+,+]      [+,-]      [-,-]      [-,+]
[+,+]  0.5500000  0.3500000  0.1000000  0.0000000
[+,-]  0.0000000  0.5500000  0.4500000  0.0000000
[-,-]  0.0000000  0.2500000  0.0000000  0.7500000
[-,+]  1.0000000  0.0000000  0.0000000  0.0000000

正如您可以推断的那样,得到的矩阵可能(也可能是)非常稀疏,从而创建了一个巨大的矩阵,其中只有某些区域实际产生了有用的信息。

我目前正在使用'markovchain‘包从数据中生成经验转换矩阵。(它是一个非常简化、更小的测试版本,只使用3个变量,每个变量有3个单独的状态。)如果我试图创建一个太大的矩阵,它将抛出一个错误,它将有许多“空”区域。有没有更好的包来支持非常大,非常稀疏的矩阵?

这是我正在使用的函数,它将生成大型稀疏矩阵,如果可以的话:

代码语言:javascript
复制
theP <- markovchainFit(data = gdxReturnsUD)$estimate@transitionMatrix

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-01-24 04:18:18

我还没有完全理解你的问题。但是,根据我的猜测,我认为您可能会使用动态贝叶斯网络来呈现您的模型。从数据结构的角度来看,你需要一个更压缩的数据结构,而不是2-D矩阵。你可以在谷歌上搜索“概率图形模型”来获得更多的想法。

票数 0
EN

Stack Overflow用户

发布于 2016-11-05 18:26:18

无论你使用哪种方法,你都会很难处理这么大的矩阵。这不是使用一台简单的笔记本电脑就能完成的操作。您将需要一台具有超大RAM的巨型机器。或者设置一个计算机集群来做繁重的工作(通过划分任务,这应该是可能的)

一旦你接触到这样的机器,你将需要手动创建矩阵。首先创建一个具有所需维度的空矩阵,然后使用一组表函数逐步填充它。

如下所示:

代码语言:javascript
复制
##create empty matrix
dummymarkov<-matrix(nrow = 10^10, ncol = 10^10) 
colnames(dummymarkov)<-unique(train$states)
rownames(dummymarkov)<-unique(train_ver2$code)
##subset your data
temp<-train[x:y] 
## table the subset
tmp_table<-table(tmp$state[1:(nrow(tmp)-1)], tmp$state[2:nrow(tmp)])
## feed the larger matrix
dummymarkov[rownames(tmp_table)[1],colnames(tmp_table)[1]]<-tmp_table[1,1]
dummymarkov[rownames(tmp_table)[2],colnames(tmp_table)[1]]<-tmp_table[2,1]
dummymarkov[rownames(tmp_table)[1],colnames(tmp_table)[2]]<-tmp_table[1,2]
dummymarkov[rownames(tmp_table)[2],colnames(tmp_table)[2]]<-tmp_table[2,2]
##repeat process until finished, then use dummymarkov to calculate the transition matrix..
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30307618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档