Sie*_*rra 5 stack-overflow r viterbi bigdata
我在R中寻找HMM实现来分析字符串中的状态,而HMM库似乎运行缓慢,然后我使用RHmm库.
我的数据是一串1953138符号(U,D,N)
这是我的数据样本:
string <- sample(c("D","U","N"),1953138,replace=T)
Run Code Online (Sandbox Code Playgroud)
适合HMM
HMM <- HMMFit(string,dis="DISCRETE",nStates=3)$HMM
Run Code Online (Sandbox Code Playgroud)
运行维特比,这是我得到错误的地方
viterbi_results <- viterbi(HMM,string)
#Error: protect(): protection stack overflow
Run Code Online (Sandbox Code Playgroud)
但是,如果我只使用字符串的一个子集viterbi()工作正常:
viterbi_results <- viterbi(HMM,string[1:49963])
Run Code Online (Sandbox Code Playgroud)
实际上,如果我尝试运行:
viterbi_results <- viterbi(HMM,string[1:49964])
#Error: protect(): protection stack overflow
Run Code Online (Sandbox Code Playgroud)
我得到相同的堆栈溢出错误,然后向量中的49964个元素是限制
我认为问题可能与以下事实有关: - max-ppsize的默认R选项是50000,但是将此参数更改为它的限制--max-ppsize 500000不能解决问题.然而,viterbi()中的向量限制确实增加,它从49964个元素变为字符串向量中的499960个元素.
我试图以块的形式运行维特比算法.首先,我将字符串拆分为49960个元素的块并将viterbi应用于每个元素,但我得到了相同的错误
list_string <- split(string, ceiling(seq_along(string)/49960))
viterbi_results <- lapply(list_string,function(x) viterbi(HMM,x)$states)
#Error: protect(): protection stack overflow
Run Code Online (Sandbox Code Playgroud)
在stackoverflow中,我发现了一个与LINK相似的问题.显然,问题的根源是在一个不需要的循环内的PROTECT.我跳进了viterbi函数的c ++源代码,但是没有一个PROTECT.
我也试过了ulimit -s unlimited,但我得到了同样的错误.
我正在使用1009 GB的RAM内存
链接到RHmm包
非常感谢您的帮助!
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |