2012-08-17 11 views
2

마크로프 체인의 속도로 공식 exp (X)를 사용합니다. 따라서 하나의 링크를 다른 링크보다 더 선택하는 비율은 exp (X1)/exp (X2)입니다. 내 문제는 때때로 X가 매우 커서 exp (X)가 double의 범위를 초과한다는 것입니다.지수가 너무 큰 값으로 마코프 체인 확률 계산

또는 exp [X [i]]가 double의 범위를 오버플로 할 정도로 큰 일부 X [i]가있는 X [i]의 배열이 주어지면 각 i에 대해 exp (X [i])/S, 여기서 S는 모든 exp (X [i])의 합입니다.

+0

질문과 대답을 명확하게 편집했습니다. 내가 잘못했다면 그들을 되돌릴 수 있습니다. –

답변

3

이 의사 코드는 일을한다 :

Let M = the largest X[i]. 

For each i: 
    Subtract M from X[i]. 

Let S = the sum of exp(X[i]) for all i. 

For each i: 
    The probability for this i is exp(X[i])/S. 

M은, 그 후, 감산 단계 후에, 일부 X [I]가 크고 매우 작은 (큰 음의 값을 가진다) 일 수 있다는 것 인 경우 그 EXP (X를 [i])는 배정 밀도가 0으로 평가됩니다. 그러나이 항목의 실제 확률은 매우 작기 때문에 실제 확률과 0 사이에는 실제적인 차이가 없으므로 exp (X [i])가 0으로 언더 플로우하는 것이 좋습니다. 언더 라운딩 에러 제외

는 확률은 감산 변환 후 동일해야하기 때문에 :

  • EXP (X-M) = EXP (X)/EXP (M).
  • 이 분할은 확률의 분자와 분모에 동일한 방식으로 영향을 미치므로 비율은 동일하게 유지됩니다.
+0

나도 안다.하지만 마크 로프 체인을 운영하고 싶다. 확률이 exp (X1)/sum (exp (Xi)) 인 링크를 선택해야합니다. 대신 exp (Xi)의 누적 배열을 만듭니다. 그리고 0에서 exp (Xn) 사이의 숫자를 생성하십시오. 그래서 저는 그 비율을 필요로하지 않습니다. 실제 숫자가 필요합니다 –

+2

X, exp (X)로 표시하기에는 너무 큰 것은 무엇입니까? ("X"가 가장 가까운 선행 명사 일 때 "두 배 범위에서 벗어날 것"이라고 썼습니다.) X가 너무 크면 exp (X)에 대해 걱정하기 전에 문제를 해결해야합니다. exp (X)가 너무 큰 경우 Xi에서 최대 Xi를 뺍니다 (최대 값을 0으로하고 나머지는 0이되도록). 이 경우 확률을 변경하지 않고 모든 중요한 exp (Xi)를 두 배 범위 내에서 유지해야합니다. (큰 음의 값이되는 모든 Xi는 확률이 매우 낮으므로 exp (Xi)가 0이면 괜찮습니다.) –