R에서 HMM 구현을 찾고 문자열의 상태를 분석했으며 HMM 라이브러리가 느리게 실행되는 것 같습니다. 그런 다음 RHmm 라이브러리를 사용하고 있습니다.r - viterbi RHmm 오류 보호 스택 오버플로
내 데이터가이 내 데이터의 샘플입니다 1,953,138 문자 (U, D, N)
의 문자열입니다
string <- sample(c("D","U","N"),1953138,replace=T)
피팅 HMM 비터 비를 실행
HMM <- HMMFit(string,dis="DISCRETE",nStates=3)$HMM
및 여기에 오류가 발생합니다.
viterbi_results <- viterbi(HMM,string)
#Error: protect(): protection stack overflow
내가 문자열 비터 비 (중 일부만을 사용하지만 경우 363,210
는) 잘 작동합니다 :
viterbi_results <- viterbi(HMM,string[1:49963])
을 사실 내가 실행하려고하면 :
viterbi_results <- viterbi(HMM,string[1:49964])
#Error: protect(): protection stack overflow
내가 같은 스택 오버플로 오류가 발생하고 49,964 벡터의 요소가 한계입니다
저는이 문제가 --max-ppsize의 기본 R 옵션이 50000이지만이 매개 변수를 제한적으로 변경한다는 사실과 관련 있다고 생각합니다 --max-ppsize 500000 #문제를 해결. 그러나 viterbi()의 벡터 한도가 증가하면 문자열 벡터에서 49964 개 요소에서 약 499960 개 요소 정도가됩니다.
나는 viterbi 알고리즘을 청크로 실행하려고 시도했다. 우선은 49960 개 요소의 덩어리로 문자열을 splited하고 각 비터 비를 적용,하지만 난 내가 LINK을 데 하나의 유사한 문제가 발견 유래에 다음과 같은 오류를
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
을 얻었다. 분명히 문제의 원인은 필요하지 않은 루프 안의 PROTECT였습니다. 나는 viterbi 함수의 C++ 소스 코드에 뛰어 들었지만 하나의 PROTECT는 없다.
나는 또한 ulimit -s unlimited
을 시도했지만 동일한 오류가 발생합니다.
는 내가 도움을
링크를 RHmm package
덕분에 RAM 메모리의 1천9기가바이트와 유닉스에서 많이하고 있어요!
임 관찰 수백만 벡터를 제외하고 동일한 문제로 실행 - 만약 당신이 문제를 해결 했습니까? –
아직까지는 개발자에게 연락을 시도했지만 지금까지는 행운을 얻지 못했습니다. 위에서 언급 한대로 – Sierra