감마

2014-04-23 4 views
4

나는 현재 C에서 바움 웰치 알고리즘을 구현하기 위해 노력하고 있지만, 나는 다음과 같은 문제로 실행 : 감마 함수 :감마

gamma(i,t) = alpha(i,t) * beta(i,t)/sum over `i` of(alpha(i,t) * beta(i,t)) 

불행하게도, 대한 충분한 관찰 t이 증가함에 따라 알파는 0으로 빠르게 떨어지고 t이 감소함에 따라 베타는 빠르게 0으로 떨어집니다. 즉, 반올림으로 인해 알파와 베타가 모두 0이 아니므로 문제가 있습니다.

이 문제를 해결할 수있는 방법이 있습니까? 아니면 값의 정밀도를 높이려고합니까? 나는이 접근법을 시도하면 문제가 발생한다는 것을 두려워한다. 알파와 베타가 관찰 당 약 1 배 정도 떨어지기 때문이다.

+0

, 당신은 더 정확한 될 수 제발, 그 알파는 삭제하고 얼마나 많은 관찰 세트 우리가 얘기 얼마나 빨리? – Kamiccolo

답변

4

당신은 로그 공간에서, 이러한 계산을 수행하고 확률 모델에 대한 일반적 모든 계산한다 :

lg_gamma(i, t) = (lg_alpha(i, t) + lg_beta(i, t) 
        - logsumexp over i of (lg_alpha(i, t) + lg_beta(i, t))) 
lg_gamma(i, t)gamma(i, t)의 대수를 나타내는

logsumexpthe function described here입니다. 계산이 끝나면 필요에 따라 exp을 사용하여 확률로 변환 할 수 있습니다 (일반적으로 확률을 표시하는 데만 필요하지만 로그가 더 바람직 할 수도 있음).

로그의 기준은 중요하지 않습니다. 모든 곳에서 동일한 기준을 사용하는 한 중요하지 않습니다. loglog2에 비해 타이핑 저장하기 때문에 :)

+0

그게 좋은 생각 같아, 고마워! – Slereah

-1

난 당신이 alphabeta 훨씬 적은 것보다 만드는 각각의 관찰 스케일링 절차를 수행해야한다고 생각 나는, 자연 로그를 선호합니다. 피연산자를 비교 범위로 유지하는 계수를 alphabeta에 곱합니다.
당신이 계수를 곱해야한다, 유사한 바운드에 보관 각각의 알파 변수에 c 말,이 c은의 형식이어야합니다 : 각 시간 단계에서 당신이 계산됩니다

c(t) = 1/sum(alpha(t,i)) , i=1... number of states , t=time step (observation) 

주의점 c(t) 해당 시간 단계의 모든 상태에 대해 모든 alpha의 값이 곱해집니다. 다음 beta 님의 동일한 절차를 수행하십시오.

충분이 절차를 설명 HMM에 대한 좋은 튜토리얼이있다 : a tutorial on hidden markov models and selected applications in speech recognition (rabiner 1989)

+0

이 링크는 질문에 대답 할 수 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [리뷰에서] (리뷰/저품절 포스트/11777709) –

+0

네가 맞다 @ BrianTompsett- 汤 莱恩. 그래서 나는 나의 대답을 편집하고 설명을 개선했다. 또한 링크 이름은 용지 이름이며 쉽게 찾을 수 있습니다. –