0

Python で Viterbi アルゴリズム (動的アルゴリズム) を実装していますが、大きな入力ファイルの場合、確率が倍増し続け、浮動小数点の精度を超えて縮小していることに気付きました。数値をログスペースに保存する必要があります。

0.0000003 を log-space に変換する方法の Python コードスニペットの簡単な例を誰か教えてもらえますか? (自然対数が必要なのか、他の対数が必要なのかはわかりません。「対数空間」については聞いたことがありますが、実際には知りません。)

ありがとう!

4

1 に答える 1

0

ログ スペースに移動するには、 を使用しますlog。再び戻るには、 を使用しますexpログ スペースのルールは異なります。乗算を実行することは、対数空間を追加することです。

>>> from math import log, exp
>>> log(0.0000003)
-15.01948336229021
>>> exp(-15.01948336229021)
3.0000000000000015e-07
>>> log(0.0000003) + log(0.0000003)
-30.03896672458042
>>> exp(-30.03896672458042)
9.000000000000011e-14 # 0.0000003 * 0.0000003 

これは、いくつかの小さな確率を使用した例です

>>> probabilities = [0.0000003, 0.0000004, 0.0000005]
>>> exp(sum(log(p) for p in probabilities))
5.999999999999992e-20
于 2015-06-15T03:55:14.237 に答える